Ответы:
Постер хочет убедиться, что служба остановлена, прежде чем пытаться перезапустить ее. Вы можете использовать цикл вывода «sc query», выполняя что-то вроде этого:
: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
Умер просто с powershell:
PS >Restart-Service MySrvcHere
Еще лучше, используя отображаемые имена:
PS >Restart-Service -displayname "My Service Name Here"
Get-Help Restart-Service
для большего
Если это чисто для перезапуска службы, вы можете использовать
Net stop myservice
Net start myservice
Однако, если вы хотите получить доступ к опциям sc, вы можете использовать команду start / wait
start /B /WAIT CMD /C "sc stop myservice"
start /B /WAIT CMD /C "sc start myservice"
эта техника является более общим решением, которое может быть применено к любой команде.
sc stop myservice
просто отправит команду останова и вернется до остановки службы. Вызов sc с помощью start / b не поможет.
Чтобы выполнить тихий перезапуск какой-либо службы, которая запрашивает подтверждение об остановке (например, в качестве службы сервера), вы можете добавить / y в конец команды остановки.
net stop Server /y
net start Server
Это было бы полезно для автоматического выполнения скрипта.
Если вы хотите перезапустить отказавший сервис, вам не нужно запускать скрипт. В оснастке MMC сервисов щелкните правой кнопкой мыши сервис, выберите свойства, перейдите на вкладку восстановления. Здесь вы можете указать, какие действия вы хотите предпринять в случае остановки сервиса. Существует много гибкости. Вам понадобится сценарий, если вы пытаетесь остановить службу, что-то сделать, затем запустить сценарий, предварять командный файл net stop "myserviceshortname"
и завершитьnet start "myserviceshortname"
В vbscipt немного больше кода для остановки службы и ее зависимых элементов:
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
Вот запуск службы и все, от чего это зависит (это должно быть знакомо)
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