我需要启动一个有序的服务序列,我需要在尝试启动下一个服务之前,每个服务都已启动并运行,我如何在Powershell中实现这一点?我如何等待停止?谢谢你,设计和开发部
o75abkj41#
不要手动执行此操作(无论脚本语言如何)。定义服务之间的适当依赖关系,Windows将按正确顺序启动/停止它们。您可以使用sc实用程序定义依赖关系:
sc
sc config Svc2 depend= Svc1
如果一个服务依赖于多个其他服务,则使用正斜杠分隔依赖的服务:
sc config Svc5 depend= Svc3/Svc4
请注意,=后面必须跟一个空格,并且前面不能跟一。
=
chhkpiq42#
如果您有一个服务名列表(比如在一个数组中),那么foreach service:1.获取其状态1.如果未运行,则启动1.在循环中有延迟时,检查其状态,直到其运行为止密钥可能是处理#3的所有possibilities,包括服务失败。但是大纲应该是这样的(不处理错误情况):
$serviceNames | Foreach-Object -Process { $svc = Get-Service -Name $_ if ($svc.Status -ne 'Running') { $svc.Start() while ($svc.Status -ne 'Running') { Write-Output "Waiting for $($svc.Name) to start, current status: $($svc.Status)" Start-Sleep -seconds 5 } } Write-Output "$($svc.Name) is running" }
Get-Service返回System.ServiceProcess.ServiceController的示例,该示例是“活动的”-指示服务的当前状态,而不仅仅是创建示例时的状态。类似的停止过程将用“Stopped”替换“Running”,用“Stop”替换“Start”调用,并且可能颠倒服务列表的顺序.
Get-Service
System.ServiceProcess.ServiceController
qfe3c7zg3#
停止服务
$ServiceNames = Get-Service | where {($_.Name -like "YourServiceNameHere*")-and ($_.Status -eq "Running")} Foreach-Object {$_.(Stop-Service $serviceNames)}
启动服务
$ServiceNames = Get-Service | where {($_.Name -like "YourServiceNameHere*")-and ($_.Status -ne "Running")} Foreach-Object {$_.(Start-Service $ServiceNames)}
cngwdvgl4#
依次开始和等待
[array]$Services = 'svc1', 'svc2', 'svc3' $Services | foreach { start-service $_ (get-service $_).WaitForStatus('Running') }
等待状态可能不需要。我没有要测试的服务很慢的系统。按顺序停下来等候
[array]$Services = 'svc1', 'svc2', 'svc3' [array]::Reverse($Services) $Services | stop-service
4条答案
按热度按时间o75abkj41#
不要手动执行此操作(无论脚本语言如何)。定义服务之间的适当依赖关系,Windows将按正确顺序启动/停止它们。您可以使用
sc
实用程序定义依赖关系:如果一个服务依赖于多个其他服务,则使用正斜杠分隔依赖的服务:
请注意,
=
后面必须跟一个空格,并且前面不能跟一。chhkpiq42#
如果您有一个服务名列表(比如在一个数组中),那么foreach service:
1.获取其状态
1.如果未运行,则启动
1.在循环中有延迟时,检查其状态,直到其运行为止
密钥可能是处理#3的所有possibilities,包括服务失败。
但是大纲应该是这样的(不处理错误情况):
Get-Service
返回System.ServiceProcess.ServiceController
的示例,该示例是“活动的”-指示服务的当前状态,而不仅仅是创建示例时的状态。类似的停止过程将用“Stopped”替换“Running”,用“Stop”替换“Start”调用,并且可能颠倒服务列表的顺序.
qfe3c7zg3#
停止服务
启动服务
cngwdvgl4#
依次开始和等待
等待状态可能不需要。我没有要测试的服务很慢的系统。
按顺序停下来等候