sviluppo-web-qa.it

Come riavvio un servizio Windows da uno script?

Ho uno script batch che assomiglia a:

sc stop myservice
sc start myservice

si interrompe perché sc non attende fino all'arresto del servizio. Come riavvio un servizio con uno script?

38
Joshua

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
47
crb

Potrebbe mancare qualcosa, ma lo uso sempre:

net stop "myservice"
net start "myservice"

o più corto:

net stop "myservice" && net start "myservice"

26
Skawt

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ù

24
Factor Mystic

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.

6
Peter Stuer

Per avere quiet riavvio di alcuni servizi, che richiede l'arresto delle conferme (come ad esempio il servizio Server), è possibile aggiungere / y alla fine del comando stop.

net stop Server /y
net start Server

Sarebbe utile per l'esecuzione automatica degli script.

5
Fedir RYKHTIK

Se si desidera riavviare un servizio non riuscito non è necessario eseguire uno script. Nei servizi MMC fai clic con il pulsante destro del mouse su un servizio, seleziona proprietà, fai clic sulla scheda Ripristino. Qui puoi impostare quali azioni vuoi che il servizio si interrompa. C'è molta flessibilità disponibile. avrà bisogno di uno script se stai tentando di interrompere il servizio, fai qualcosa quindi avvia lo script, prefiggi il file batch con net stop "myserviceshortname" e termina con net 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
3
Jim B

È possibile utilizzare i seguenti comandi:

@echo off
sc Stop <Name of Agentry Service Here>
timeout 30
sc start <Name of Agentry Service Here>
1
Ganesh