Quick & Dirty: Server zu einer bestimmten Uhrzeit neustarten und per Mail benachrichtigen

Hier mal wieder ein kleines Script aus der Reihe “Quick & Dirty”. Das Script kann einen Server neustarten und schickt eine Mail mit dem Status:

#Server neustart

$servername = „SERVER01“

$to = “frank@frankysweb.de”
$from = “rebooter@frankysweb.de”
$smtpserver = „smtp.frankysweb.local“

Send-MailMessage -To $to -From $from -SmtpServer $smtpserver -Subject „Neustart für Server $servername“ -body „Der Server $servername wird jetzt neugestartet“
Restart-Computer -ComputerName $servername -Force

do {$ping = Test-Connection $servername -Count 1 -Quiet}
while ($ping -match „True“)

Send-MailMessage -To $to -From $from -SmtpServer $smtpserver -Subject „Server $servername ist offline“ -body „Der Server $servername befindet sich in der Neustartphase“

do {$ping = Test-Connection $servername -Count 1 -Quiet}
while ($ping -match „False“)

sleep 30

$servicelist = get-wmiobject win32_service -computername $servername | where {$_.Startmode -match „Auto“ -and $_.State -match „Stopped“}
foreach ($service in $servicelist)
{
$servicename = $service.name
$displayname = get-service $servicename -computername $servername
$displayname = $displayname.displayname
$displayname = [string]$displayname + „, “
$downservice += $displayname
}

Send-MailMessage -To $to -From $from -SmtpServer $smtpserver -Subject „Server $servername ist online“ -body „Der Server $servername ist neugestartet Folgende Dienste laufen nicht $downservice“

Das Script kann per Aufgabenplanung von einem anderen Server oder Rechner gestartet werden. Es schickt eine Mail wenn der Server neugestartet wird, eine Mail wenn er offline ist und eine Mail wenn er wieder erreichbar ist. Bei der letzten Mail werden auch die Dienste angezeigt die als Startart “Automatisch” eingestellt haben, aber nicht gestartet wurden.

1 Gedanke zu „Quick & Dirty: Server zu einer bestimmten Uhrzeit neustarten und per Mail benachrichtigen“

  1. Hab’s etwas verbessert. Das hier wartet bei Windows Updates, bis der Server wirklich wieder oben ist und eine WMI-Abfrage anspricht.

    do {
    sleep 30
    $servicelist = get-wmiobject win32_service -computername $servername | where {$_.Startmode -match „Auto“ -and $_.State -match „Stopped“}
    } while ($servicelist -match „False“)

    Antworten

Schreibe einen Kommentar