Como reinicio um serviço do Windows a partir de um script?

35

Eu tenho um script em lote que se parece com:

sc stop myservice
sc start myservice

erros porque sc não espera até que o serviço seja interrompido. Como faço para reiniciar um serviço com um script?

    
por Joshua 12.06.2009 / 22:48

7 respostas

45

O anunciante deseja garantir que o serviço seja interrompido antes de tentar reiniciá-lo. Você pode usar um loop na saída de "sc query" fazendo algo assim:

: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
    
por 12.06.2009 / 22:54
24

Pode estar faltando alguma coisa, mas eu uso isso o tempo todo:

net stop "myservice"
net start "myservice"

ou menor:

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

    
por 13.06.2009 / 00:23
21

Dead simple com powershell:

PS >Restart-Service MySrvcHere

Melhor ainda, usando nomes de exibição:

PS >Restart-Service -displayname "My Service Name Here"

Get-Help Restart-Service para mais

    
por 13.06.2009 / 08:50
5

Se é puramente para reiniciar o serviço, você pode usar

Net stop myservice
Net start myservice

No entanto, se você quiser acessar as opções de sc, você pode usar o comando start / wait

start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"

esta técnica é uma solução mais geral que pode ser aplicada a qualquer comando.

    
por 13.06.2009 / 09:29
4

Para reiniciar o quiet de algum serviço, que solicita que as confirmações sejam interrompidas (como serviço do servidor, por exemplo), você pode adicionar / y ao fim da parada comando.

net stop Server /y
net start Server

Seria útil para a execução automática de scripts.

    
por 20.05.2011 / 14:55
2

Se você quiser reiniciar um serviço com falha, não será necessário executar um script. Nos serviços MMC snapin clique direito em um serviço, selecione propriedades, clique na guia de recuperação. Aqui você pode definir quais ações você quer que sejam tomadas caso o serviço seja interrompido. Há muita flexibilidade disponível. Você precisará de um script se estiver tentando interromper o serviço, fazer algo, iniciar o script, começar o arquivo de lote com net stop "myserviceshortname" e terminar com net start "myserviceshortname"

No vbscipt, é um pouco mais código para parar um serviço e seus dependentes:

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

Aqui está começando um serviço e tudo de que ele depende (isso deve 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
    
por 13.06.2009 / 03:22
0

Você pode usar os seguintes comandos:

@echo off
sc Stop <Name of Agentry Service Here>
timeout 30
sc start <Name of Agentry Service Here>
    
por 26.02.2016 / 06:59