Thursday, December 15, 2022

Powershell script to monitor and restart stopped Windows Services and notify users via email

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%