Powershell script to monitor and restart stopped Windows Services. This can be configured to run to monitor multiple windows service.
$winServices = @{"WinServiceName1", "WinServiceName2", "WinServiceName3"}
$recipients = "dl-group@company.com,dl-group2@gmail.com,abc@gmail.com"
[string[]]$To = $recipients.Split(',')
foreach ($service in $winServices){
$s = Get-Service -Name $service
if($s.status -ne 'Running')
{
Write-Host $s.Name 'is not running. Take action'
Send-MailMessage -From "NO-REPLY@company.com" -To $To -Subject "$($s.Name) service is stopped" -Body "$($s.Name) service is stopped and needs attention" -SMTPServer "smpt.server.com"
Write-Host 'Restarting:' $s.Name
Start-Service -Name $s.Name
Send-MailMessage -From "NO-REPLY@company.com" -To $To -Subject "$($s.Name) service is restarted" -Body "$($s.Name) service is has been restarted" -SMTPServer "smpt.server.com"
}
}
Save the above scripts as MonitorServices.ps1
Make a batch file and use Windows Scheduled Task to run it:
@ECHO OFF
cd /d %~dp0
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '.\MonitorServices.ps1'
exit \b %ERRORLEVEL%