Risposte:
Il poster vuole assicurarsi che il servizio sia interrotto prima di provare a riavviarlo. È possibile utilizzare un ciclo sull'output di "sc query" facendo qualcosa del genere:
: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
Morto semplice con PowerShell:
PS >Restart-Service MySrvcHere
Ancora meglio, usando i nomi visualizzati:
PS >Restart-Service -displayname "My Service Name Here"
Get-Help Restart-Service
per più
Se è puramente per riavviare il servizio, è possibile utilizzare
Net stop myservice
Net start myservice
Tuttavia, se si desidera accedere alle opzioni di sc, è possibile utilizzare il comando start / wait
start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"
questa tecnica è una soluzione più generale che può essere applicata a qualsiasi comando.
sc stop myservice
invierà semplicemente il comando stop e tornerà prima che il servizio venga arrestato. Chiamare sc con start / b non aiuta.
Per avere un riavvio silenzioso di alcuni servizi, che richiede l'arresto delle conferme (come ad esempio il servizio Server), è possibile aggiungere / y alla fine del comando di arresto.
net stop Server /y
net start Server
Sarebbe utile per l'esecuzione automatica degli script.
Se si desidera riavviare un servizio non riuscito non è necessario eseguire uno script. Nello snap-in MMC servizi fare clic con il tasto destro su un servizio, selezionare Proprietà, fare clic sulla scheda Ripristino. Qui puoi impostare quali azioni vuoi intraprendere se il servizio si interrompesse. C'è molta flessibilità disponibile. Avrai bisogno di uno script se stai cercando di interrompere il servizio, fare qualcosa, quindi avviare lo script, prefigurare il file batch con net stop "myserviceshortname"
e terminare connet start "myserviceshortname"
In vbscipt è un po 'più di codice per arrestare un servizio e i suoi "dipendenti:
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
Qui sta avviando un servizio e tutto ciò da cui dipende (questo dovrebbe essere familiare)
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