: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
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
发布者希望确保在尝试重新启动服务之前停止服务。您可以在“sc 查询”的输出上使用循环,执行以下操作:
可能会遗漏一些东西,但我一直都在使用它:
或更短:
使用 powershell 很简单:
更好的是,使用显示名称:
Get-Help Restart-Service
更多如果纯粹是为了重启服务,可以使用
但是,如果你想访问 sc 的选项,你可以使用 start /wait 命令
这种技术是一种更通用的解决方案,可以应用于任何命令。
要安静地重新启动某些要求停止确认的服务(例如,作为服务器服务),您可以将/y添加到停止命令的末尾。
这将有助于自动执行脚本。
如果要重新启动失败的服务,则无需运行脚本。在服务MMC管理单元中右键单击服务,选择属性,单击恢复选项卡。您可以在此处设置在服务停止时要执行的操作。有很多可用的灵活性。如果您尝试停止服务,您将需要一个脚本,做一些事情然后启动脚本,在批处理文件前面加上
net stop "myserviceshortname"
并结束net start "myserviceshortname"
在 vbscipt 中,停止服务及其依赖项需要更多代码:
这是启动一个服务和它所依赖的任何东西(这应该很熟悉)
您可以使用以下命令:
我做了一个混合:在 *.cmd 文件中: