Respuestas:
El póster quiere asegurarse de que el servicio se detenga antes de intentar reiniciarlo. Puede usar un bucle en la salida de "sc query" haciendo algo como esto:
:stop
sc stop myservice
rem cause a ~10 second sleep before checking the service state
ping 127.0.0.1 -n 10 -w 1000 > nul
sc query myservice | find /I "STATE" | find "STOPPED"
if errorlevel 1 goto :stop
goto :start
:start
net start | find /i "My Service">nul && goto :start
sc start myservice
Muy simple con powershell:
PS >Restart-Service MySrvcHere
Aún mejor, usando nombres para mostrar:
PS >Restart-Service -displayname "My Service Name Here"
Get-Help Restart-Service
para más
Si es solo para reiniciar el servicio, puede usar
Net stop myservice
Net start myservice
Sin embargo, si desea acceder a las opciones de sc, puede usar el comando start / wait
start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"
Esta técnica es una solución más general que se puede aplicar a cualquier comando.
sc stop myservice
solo enviará el comando de detención y regresará antes de que se detenga el servicio. Llamar a sc con start / b no ayudará.
Para tener un reinicio silencioso de algún servicio, que solicita que se detengan las confirmaciones (como el servicio del servidor, por ejemplo), puede agregar / y al final del comando de detención.
net stop Server /y
net start Server
Sería útil para la ejecución automática de scripts.
Si desea reiniciar un servicio fallido, no necesita ejecutar un script. En los servicios MMC, haga clic derecho en un servicio, seleccione propiedades, haga clic en la pestaña de recuperación. Aquí puede establecer qué acciones desea que se realicen si el servicio se detiene. Hay mucha flexibilidad disponible. Necesitará una secuencia de comandos si está tratando de detener el servicio, haga algo y luego inicie la secuencia de comandos, introduzca el archivo por lotes net stop "myserviceshortname"
y termine connet start "myserviceshortname"
En vbscipt es un poco más de código para detener un servicio y sus dependientes:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='myservice'} Where " _
& "AssocClass=Win32_DependentService " & "Role=Antecedent" )
For each objService in colServiceList
objService.StopService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='myservice'")
For each objService in colServiceList
errReturn = objService.StopService()
Next
Aquí está comenzando un servicio y cualquier cosa de la que dependa (esto debería ser familiar)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery _
("Select * from Win32_Service where Name='Myservice'")
For each objService in colServiceList
errReturn = objService.StartService()
Next
Wscript.Sleep 20000
Set colServiceList = objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='myservice'} Where " _
& "AssocClass=Win32_DependentService " & "Role=Dependent" )
For each objService in colServiceList
objService.StartService()
Next