我有一个批处理脚本,如下所示:
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停止“服务名称”
最好的祝愿