Check service status in powershell

This week have been dedicated to baselining and monitoring server state. Our department is mainly monitoring SQL Server, Sharepoint  and Dynamic CRM servers for our customers. Therefore, it is very important to check if services for are running at all time. If they are not running we have to restart them, otherwise out customers will have downtime for the particular service. The powershell script below checks if a service exist and running. If it is not running the script is trying to restart the service. The script will send an email if the servcie is not installed on the server or can not be restarted.

CHECK_SERVICE_STATE.PS1:
param([String]$svcname="")

if ($svcname.Trim().Length -eq 0)
{
    Write-Host "Invalid service name" ;
    return ;
}

$svc = get-service $svcname -ErrorAction SilentlyContinue;
if ($svc -eq $null)
{
    $xto = "jon.doe@company.com"
    $xfrom = "no-reply@company.com"
    $xsub = $env:COMPUTERNAME + ": " + $svcname + " service error";
    $msg = $env:COMPUTERNAME + ": " + $svcname + " service does not exist";
    Write-host $msg
    Send-MailMessage -To $xto -From $xfrom  -Subject $xsub  
                     -Body $msg -SmtpServer smtp.company.com
    return;
}

$sts = $svc | Select Status;
if ($sts.Status.ToString() -eq "Stopped")
{
    Write-Host "Service " $svcname  " is STOPPED ==> trying to restart";
    Restart-Service $svcname ;
    $svc = get-service $svcname -ErrorAction SilentlyContinue;
    if ($svc -ne $null)
    {
        $sts = $svc | Select Status ;
        if ($sts.Status.ToString() -eq "Stopped")
        {
            $xto = "jon.doe@company.com"
            $xfrom = "no-reply@company.com"
            $xsub = $env:COMPUTERNAME + ": " + $svcname + " service error";
            $msg = $env:COMPUTERNAME + ": " + $svcname 
                          + " service could not be restarted";
            Write-host $msg
            Send-MailMessage -To $xto -From $xfrom  -Subject $xsub  
                             -Body $msg -SmtpServer smtp.company.com
            return
        }

        Write-Host $svcname " status = " $sts.Status.ToString();
    }
}
else
{
    Write-Host "Service " $svcname " is still RUNNING";
}
Advertisements