在powershell中,我已经看到了多种停止服务的方法
更现代的方式
Stop-Service wuauserv
Run Code Online (Sandbox Code Playgroud)
更传统的方式
NET STOP WUAUSERV
Run Code Online (Sandbox Code Playgroud)
我有powershell脚本,使用packer构建windows黄金映像.最初使用的脚本NET STOP.我发现,一旦切换到Stop-Service,在安装Windows更新后重启VM时,我似乎会遇到更频繁的故障.
同时做两个Stop-Service并NET 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为了停止运行依赖的服务(依赖于服务被停止的其他服务).
由于我认为是一个bug,你甚至无法停止自己依赖其他服务的服务(!).
实际上,从Windows PowerShell v5.1/PowerShell Core v6.0-rc开始,您只能停止Set-Service -Status Stopped没有依赖项的服务(没有依赖它们的服务),也不能依赖其他服务.
可选阅读:查看Stop-Service和Start-Service源代码:
GitHub上的公开源代码是针对PowerShell 的跨平台核心版本,但看起来有问题的代码基本上是从Windows PowerShell版本中未经修改的.
Stop-Service:代码等待服务处于ServiceControllerStatus.Stopped状态[1]的部分
,如果-NoWait明确指定了切换,则仅绕过该部分,在这种情况下变量waitForServiceToStop设置为false.
Start-Service:代码总是等待服务处于该ServiceControllerStatus.Running状态的部分.
[1]如果达到目标状态的时间超过2秒,等待循环会发出警告(每 2秒钟),同时继续等待 ; 等待仅中止与错误,如果服务是出乎意料既不在目标状态- 未决状态也不在目标状态.
| 归档时间: |
|
| 查看次数: |
2921 次 |
| 最近记录: |