Sé libre de compartir nuestros tutoriales y códigos en tus redes, necesitamos tu ayuda para hacer crecer esta comunidad.
Solución:
Creo que puede haber complicado demasiado su código: si solo está verificando si un servicio se está ejecutando y, si no, ejecútelo y luego deje de volver a evaluar, lo siguiente debería ser suficiente:
Buen punto en la actualización.
$ServiceName = 'Serenade'
$arrService = Get-Service -Name $ServiceName
while ($arrService.Status -ne 'Running')
Start-Service $ServiceName
write-host $arrService.status
write-host 'Service starting'
Start-Sleep -seconds 60
$arrService.Refresh()
if ($arrService.Status -eq 'Running')
Write-Host 'Service is now Running'
Dado $arrService = Get-Service -Name $ServiceName
, $arrService.Status
es un static propiedad, correspondiente al valor en el momento de la convocatoria. Usar $arrService.Refresh()
cuando sea necesario para renovar las propiedades a los valores actuales.
MSDN ~ ServiceController.Actualizar()
Actualiza los valores de propiedad restableciendo las propiedades a sus valores actuales.
La combinación de las soluciones de Alaa Akoum y Nick Eagle me permitió recorrer una serie de servicios de Windows y detenerlos si se estaban ejecutando.
# stop the following Windows services in the specified order:
[Array] $Services = 'Service1','Service2','Service3','Service4','Service5';
# loop through each service, if its running, stop it
foreach($ServiceName in $Services)
$arrService = Get-Service -Name $ServiceName
write-host $ServiceName
while ($arrService.Status -eq 'Running')
Stop-Service $ServiceName
write-host $arrService.status
write-host 'Service stopping'
Start-Sleep -seconds 60
$arrService.Refresh()
if ($arrService.Status -eq 'Stopped')
Write-Host 'Service is now Stopped'
Lo mismo se puede hacer para iniciar una serie de servicios si no se están ejecutando:
# start the following Windows services in the specified order:
[Array] $Services = 'Service1','Service2','Service3','Service4','Service5';
# loop through each service, if its not running, start it
foreach($ServiceName in $Services)
$arrService = Get-Service -Name $ServiceName
write-host $ServiceName
while ($arrService.Status -ne 'Running')
Start-Service $ServiceName
write-host $arrService.status
write-host 'Service starting'
Start-Sleep -seconds 60
$arrService.Refresh()
if ($arrService.Status -eq 'Running')
Write-Host 'Service is now Running'