it-swarm-ru.tech

Как перезапустить службу Windows из скрипта?

У меня есть пакетный скрипт, который выглядит так:

sc stop myservice
sc start myservice

он выдает ошибку, потому что sc не ожидает остановки службы. Как перезапустить сервис с помощью скрипта?

38
Joshua

Постер хочет убедиться, что служба остановлена, прежде чем пытаться перезапустить ее. Вы можете использовать цикл вывода "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
47
crb

Может быть, чего-то не хватает, но я все это время использую:

чистая остановка "myservice"
net start "myservice"

или короче:

нет остановки "myservice" && net start "myservice"

26
Skawt

Умер просто с powershell:

PS >Restart-Service MySrvcHere

Еще лучше, используя отображаемые имена:

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

Get-Help Restart-Service для большего

24
Factor Mystic

Если это чисто для перезапуска службы, вы можете использовать

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"

эта техника является более общим решением, которое может быть применено к любой команде.

6
Peter Stuer

Чтобы тихо перезапустить какую-либо службу, которая запрашивает подтверждения об остановке (например, в качестве службы сервера), вы можете добавить / y в конец команды остановки.

net stop Server /y
net start Server

Это было бы полезно для автоматического выполнения скрипта.

5
Fedir RYKHTIK

Если вы хотите перезапустить отказавший сервис, вам не нужно запускать скрипт. В сервисах 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
3
Jim B

Вы можете использовать следующие команды:

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