it-swarm.cn

如何从脚本重新启动Windows服务?

我有一个批处理脚本,如下所示:

sc stop myservice
sc start myservice

它会出错,因为sc不会等到服务停止。如何使用脚本重新启动服务?

38
Joshua

发布者希望确保在尝试重新启动服务之前已将其停止。您可以在“ 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
47
crb

可能会丢失一些东西,但是我一直都在使用它:

净停止“ myservice”
net启动“ myservice”

或更短:

净停止“ myservice”和&净开始“ myservice”

26
Skawt

简而言之,具有强大的功能:

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

quiet重新启动某些服务,要求停止确认(例如,作为Server服务),可以在stop命令的末尾添加/ 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