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

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

sc stop myservice sc start myservice 

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

    海报希望在尝试重新启动之前确保服务已停止。 你可以在“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 

    可能会错过一些东西,但是我一直在使用它:

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

    或更短:

    净停止“myservice”&&networking启动“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" 

    这种技术是一个更通用的解决scheme,可以应用于任何命令。

    要使某些服务安静重启,要求停止确认(例如,以服务器服务为例),可以将/ y添加到停止命令的结尾处。

     net stop Server /y net start Server 

    这对自动脚本执行会有帮助。

    如果您想重新启动失败的服务,则不需要运行脚本。 在服务MMCpipe理单元中右键单击服务,select属性,单击恢复选项卡。 在这里,您可以设置在服务停止时您要采取的操作。 有很多的灵活性可用。 你将需要一个脚本,如果你试图停止服务,做一些事情,然后启动脚本,以net stop "myserviceshortname"batch file,并以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 

    您可以使用以下命令:

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

    如果您想在远程机器上停止服务,请按照说明操作

    步骤1:以pipe理员身份login到具有authentication凭证的远程机器

    步骤2:在电脑中打开命令提示符

    第3步:sc \ Remote_Machine_IPAddress停止“服务名称”

    最好的祝愿