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

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s