Script PowerShell para reiniciar servicios windows

En algunas ocasiones necesitamos tener una forma de reiniciar ciertos servicios de manera automática, por ejemplo, si hemos programado un servicio de windows para que realice una determinada tarea y queremos que el servicio se reinicie cada día de madrugada. En estos casos puede resultar útil disponer de un script que se encargue de hacer el reinicio por nosotros.

A continuación mostramos un pequeño script en powershell que se puede utilizar para esta tarea:

$Logfile = "C:\logs\$(gc env:computername)-RestartService.log"

Function LogWrite
{
Param ([string]$logstring)
$timestamp = Get-Date -Format "dd/MM/yyyy hh:mm:ss"
$logMessage = $timestamp + " " + $logstring

Add-content $Logfile -value $logMessage
}

LogWrite "Iniciando Script para reiniciar servicios CMIS"

$Service1 = get-service "hpHotkeyMonitor" | where {$_.status -eq 'running'}

if ($Service1) {
LogWrite "El servicio hpHotkeyMonitor esta arrancado. Reiniciando servidor..."
get-service "hpHotkeyMonitor" | where {$_.status -eq 'running'} | restart-service -force
do {
Start-Sleep -s 30
$status = get-service "hpHotkeyMonitor" | where {$_.status -eq 'running'}
if (!$status) { LogWrite "El servicio aun no se ha reiniciado" }
} while (!$status)
LogWrite "El servicio ya se ha reiniciado y esta en ejecucion"
} else {
LogWrite "El servicio no esta arrancado. Se finaliza la ejecucion del script"
Exit
}

En este caso, el servicio a reiniciar es el “HP HotKey Monitor“. En cada caso concreto habrá que identificar el servicio, para ello se puede ejecutar el siguiente comando: services.msc con lo que aparecerá la lista con todos los servicios de windows del sistema.

Una vez localizado el servicio que hay que reiniciar, al hacer doble click sobre el aparecerá una ventana como la siguiente:

Ventana de propiedades de los servicios de windows

Aquí el dato que nos interesa es el nombre del servicio, en nuestro caso: hpHotkeyMonitor

Después solo habrá que sustituir en el script de powershell anterior el texto hpHotkeyMonitor por el nombre del servicio que se quiera reiniciar.

Simplemente comentar que el script generará un fichero de log con el resultado de su ejecución, la ubicación y el nombre de este fichero se configura en la primera línea del script de powershell.

En caso de que se quiera configurar una tarea programada para que ejecute el script y haya problemas de permisos, se puede utilizar un simple fichero .bat que contendrá la siguiente línea:

powershell -ExecutionPolicy ByPass -File C:\Users\Flotadorderayas\Documents\RestartService.ps1