Monitoring Citrix XenDesktop / XenApp 7.17 Delivery Controller services with PowerShell script and task scheduler

I recently wrote the following blog post:

Monitoring Microsoft Exchange Server 2010, 2013 and 2016 services with PowerShell script and task scheduler
https://blog.terenceluk.com/2018/03/monitoring-microsoft-exchange-server.html

… demonstrating how to use a script to check for hung or stopped services for Exchange and to restart and send an email notification as a reaction to these events.  A few people have reached out to me about using this for Citrix XenApp / XenDesktop environments and the short answer to the question is yes, you can indeed use this script because it universally monitors Windows services.

The following is the modified script that includes the Citrix XenDesktop / XenApp 7.17 Delivery Controller services:

#NAME: service_check.ps1 

#AUTHOR: Kevin Olson

#DATE: 4/29/2011

#Machine to be monitored

$Computer = “citrixServer”

#Create an array of all services running

$GetService = get-service -ComputerName $Computer

#Create a subset of the previous array for services you want to monitor

$ServiceArray = “CitrixADIdentityService”,”CitrixAnalytics”,”CitrixAppLibrary”,”CitrixBrokerService”,”CitrixConfigSyncService”,”CitrixConfigurationLogging”,”CitrixConfigurationService”,”CitrixConnector”,”CitrixDelegatedAdmin”,”CitrixEnvTest”,”CitrixHighAvailabilityService”,”CitrixHostService”,”CitrixMachineCreationService”,”CitrixMonitor”,”CitrixOrchestration”,”CitrixPrivilegedService”,”CitrixStorefront”,”CitrixTelemetryService”,”CitrixTrust”,”XaXdCloudProxy”;

#Find any iWFM service that is stopped

foreach ($Service in $GetService)

{

     foreach ($srv in $ServiceArray)

     {

         if ($Service.name -eq $srv)

         {

             #check if a service is hung

             if ($Service.status -eq “StopPending”)

             {

             $servicePID = (gwmi win32_Service | where { $_.Name -eq $srv}).ProcessID

             Stop-Process $ServicePID

             Start-Service -InputObject (get-Service -ComputerName $Computer -Name $srv)

             #email to notify if a service is down

             Send-Mailmessage -to administrator@someDomain.com -Subject “$srv is hung on $Computer” -from exchange@contoso.com -Body “The $srv service was found hung.” -SmtpServer localhost

             }

             # check if a service is stopped

             elseif ($Service.status -eq “Stopped”)

             {

             #automatically restart the service.

             Start-Service -InputObject (get-Service -ComputerName $Computer -Name $srv)

         #email to notify if a service is down

             Send-Mailmessage -to administrator@someDomain.com -Subject “$srv is stopped on $Computer” -from exchange@contoso.com -Body “The $srv service was found stopped.” -SmtpServer localhost

             }

         }

     }

}

As the list of services change through the versions of XenDesktop / XenApp, I am including the following screenshot of the services for version 7.17:

clip_image002