gpt4 book ai didi

powershell - powershell Stop-Service 和 NET-STOP 有什么区别

转载 作者:行者123 更新时间:2023-12-03 14:16:50 27 4
gpt4 key购买 nike

在 powershell 中,我看到了多种停止服务的方法

更现代的方式

Stop-Service wuauserv

而更传统的方式
NET STOP WUAUSERV

遗留方式 is much more difficult to automate because it is not natively idempotent.

我有使用打包程序构建 Windows 黄金图像的 powershell 脚本。最初使用的脚本 NET STOP .切换到 Stop-Service后发现,在安装 Windows 更新后重新启动 VM 时,我似乎更频繁地失败。

两者都做 Stop-ServiceNET STOP产生相同的结果?或者它们之间是否存在差异可以解释为什么传统的看起来更可靠?

最佳答案

对于 Windows 服务:

  • 当前正在运行
  • 并且原则上可以停止

  • 两者 net stop Stop-Service 应该相同,即同步:

    也就是说,它们向指定的服务发送停止请求并等待停止完成( net stop 总是等待,而在 PSv5+ 中,您可以使用 Stop-Service-NoWait 开关选择退出等待)。

    不像 net stop (如果服务已经停止,则报告错误), Stop-Service是幂等的(表现出期望状态逻辑):如果目标服务已经处于停止状态,则该命令是一个安静的空操作。

    (顺便说一句: Start-Service 也是同步的,但总是如此,而且也是幂等的。)

    Set-Service -Status Stopped 应该与 Stop-Service 的作用相同, 除了那个:
  • 不像 Stop-Service , 不支持 -Force为了停止具有正在运行的依赖项的服务(依赖于正在停止的服务的其他服务)。
  • 由于 what I presume to be a bug您甚至无法停止依赖于其他服务的服务(!)。
  • 实际上,从 Windows PowerShell v5.1/PowerShell Core v6.0-rc 开始,您只能使用 Set-Service -Status Stopped 停止服务。没有依赖项(没有依赖于它们的服务),它们本身也不依赖于其他服务。


  • 选读:看Stop-ServiceStart-Service源代码:

    GitHub 上公开的源代码适用于 PowerShell 的跨平台 Core 版本,但看起来有问题的代码基本上未修改自 Windows PowerShell 版本。
  • Stop-Service : part where the code waits for the service to be in the ServiceControllerStatus.Stopped state [1]
    ,只有在 -NoWait 时才会绕过switch 被明确指定,在这种情况下变量 waitForServiceToStop设置为 false .
  • Start-Service : part where the code invariably waits for the service to be in the ServiceControllerStatus.Running state .


  • [1] 如果达到目标状态 takes longer than 2 seconds ,等待循环在继续等待的同时发出警告(每 2 秒一次);如果服务意外地既不处于目标状态挂起状态也不处于目标状态,则等待只会因错误而中止。

    关于powershell - powershell Stop-Service 和 NET-STOP 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47405100/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com