Відповіді:
Плакат хоче переконатися, що послуга зупинена перед тим, як спробувати її перезапустити. Ви можете використовувати цикл на виході "sc запиту", роблячи щось подібне:
: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
Мертвий простий з повноцінною оболонкою:
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
просто надішле команду stop та повернеться до того, як послуга буде зупинена. Виклик sc із запуском / 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