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


Answers:


47

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

8
很好地使用ping作为时间延迟。
David Yu

谢谢,没有批量睡眠,所以您可以等待所有的时间:)
crb

4
+1和GOTO徽章。授予那些使用GOTO表情的人。
约瑟夫·科恩

如果仅支持批处理的do / while循环...真的在C#中是微不足道的!
crb

3
在Windows Server 2008中,错误级别为0(发现)和1(未发现)。因此,我不得不反转逻辑,然后它才起作用。
Kirk Woll

26

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

净停止“ myservice”净停止
“ myservice”

或更短:

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


24

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

PS >Restart-Service MySrvcHere

更好的是,使用显示名称:

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

Get-Help Restart-Service 更多


6

如果仅用于重启服务,则可以使用

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只会发送停止命令并在服务停止之前返回。使用start / b调用sc将无济于事。
尔根·斯坦布鲁克

5

安静地重新启动某些服务,要求停止确认(例如,作为服务器服务),可以在stop命令的末尾添加/ y

net stop Server /y
net start Server

这将有助于自动执行脚本。


3

如果要重新启动失败的服务,则无需运行脚本。在服务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

1

您可以使用以下命令:

@echo off
sc Stop <Name of Agentry Service Here>
timeout 30
sc start <Name of Agentry Service Here>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.