Benutzer mit den meisten Antworten
Windows Dienst überwachen und Mail verschicken, wenn Dienst beendet

Frage
-
Hallo Zusammen,
ich versuche ein Skript zu schreiben, das jede Minute überprüft, ob ein Dienst läuft. Wenn dieser nicht gestartet ist, soll eine E-Mail verschickt werden. Ich habe folgenden Skript getestet, funktioniert aber nicht 100%ig:
$servicename="PeerDistSvc" #Dienstname $timespan = New-Object System.TimeSpan(0,1,0) #Stunden,Minuten,Sekunden $scope = New-Object System.Management.ManagementScope("\\.\root\cimV2") $query = New-Object System.Management.WQLEventQuery ("__InstanceModificationEvent",$timespan, "TargetInstance ISA 'Win32_service'" ) $watcher = New-Object System.Management.ManagementEventWatcher($scope,$query) do { $b = $watcher.WaitForNextEvent() $b.TargetInstance.Name $b.TargetInstance.caption # Eigenschaftenn der WMI-Klasse: win32_service if ($(get-service -name $servicename).status -eq "Stopped") { start-service -name $servicename Send-MailMessage -smtpServer server fqdn -From admin@ab.loc -To user@ab.loc -Subject 'Dienst auf Server XX-01 unerwartet beendet. Dienst wurde neugestartet' -Body "Body content" } } while ($a -ne 1)
Danke
- Bearbeitet sonicalert Montag, 7. August 2017 08:59
Antworten
-
Hi,
ich würde das so lösen:
$computer = "Server" $service = "Dienstname" $foo = Get-Service -ComputerName $computer -Name $Service if ($foo.Status -ne "Running") { send-mailmessage ..... }
Das Skript dann per geplanten Task alle Minute ausführen.
Gruß
Christian
Christian Groebner MVP Forefront
- Als Antwort markiert sonicalert Mittwoch, 17. Februar 2016 14:00
Alle Antworten
-
Hi,
ich würde das so lösen:
$computer = "Server" $service = "Dienstname" $foo = Get-Service -ComputerName $computer -Name $Service if ($foo.Status -ne "Running") { send-mailmessage ..... }
Das Skript dann per geplanten Task alle Minute ausführen.
Gruß
Christian
Christian Groebner MVP Forefront
- Als Antwort markiert sonicalert Mittwoch, 17. Februar 2016 14:00
-
Hi Christian,
vielen Dank für den Tipp. Hier das Skript:
$ComputerName = (get-wmiobject Win32_Computersystem).name $ServiceName = "Name" $ServiceDisplayName = (Get-Service $ServiceName).DisplayName function SendAlert { $FromAddress = "admin@abc.com" $ToAddress = "user@abc.com" $MessageSubject = "Name-Dienst wurde auf $ComputerName unerwartet beendet" $MessageBody = "Der Dienst $ServiceDisplayName ($ServiceName) auf dem Server $ComputerName wurde unerwartet beendet und neugestartet!" $SendingServer = "a.b.c.d" ###Create the mail message and add the statistics text file as an attachment $SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody ###Send the message $SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer $SMTPClient.Send($SMTPMessage) }
$Status = (Get-Service $ServiceName).Status
If ($Status -ne "Running")
{
Start-Service -name $ServiceName
SendAlert
}Gruß
- Bearbeitet sonicalert Montag, 7. August 2017 08:59