【问题标题】:PowerShell: Window service must stop before proceedingPowerShell:窗口服务必须停止才能继续
【发布时间】: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


【解决方案1】:

只需使用 WaitForStatus: ServiceController.WaitForStatus Method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多