【发布时间】:2021-08-04 16:21:08
【问题描述】:
我有一个 PowerShell 脚本,我要在其中停止 Windows 服务。然后,我希望等到服务显示'Stopped' 状态。我发出适当的命令来停止服务。我尝试使用类似于...的 WHILE 循环。
While ((Get-Service -Name $ServiceName).Status -ne 'Stopped')
{
Start-Sleep -s 5
}
我还在上面的 WHILE 循环中添加了一个计数器,用于检查计数器的计数是否超过 5。计数器在退出 WHILE 循环时工作,但服务仍然没有显示@的状态987654324@。在我继续脚本中的剩余代码之前,必须停止服务。
【问题讨论】:
-
但是,在您向我们展示代码之前,您是否正在为您尝试停止的服务运行
Stop-Service或.Stop(),并且该过程仍显示为'Running'?你有任何错误吗? -
服务是停止了,只是很慢,还是服务没有停止?如果必须在继续之前停止服务,为什么要跳出循环?也许更改为
While (($Service = Get-Service -name $ServiceName).Status -ne 'Stopped')然后在循环内If($Service.Status -eq 'Running'){ Stop-Service -Name $ServiceName -Force} -
需要明确的是,
Stop-Service已经等待服务停止再继续,除非您指定-NoWait。超时时间根据服务本身而定,但如果需要更长,可以覆盖:stackoverflow.com/a/35871759/7411885 -
如果
Stop-Service出错,它不会结束脚本,因为错误不会终止。这可以通过Stop-Service MyService -ErrorAction Stop进行更改
标签: powershell service