PowerShell 5.1重启Windows服务:禁用服务未触发异常捕获的问题
问题解决方法
核心问题原因
Restart-Service 在遇到禁用服务这类错误时,默认只会抛出非终止错误,而PowerShell的try/catch仅捕获终止错误,所以你的脚本里catch块不会触发,反而继续执行成功提示语句。
修正后的脚本
$svcs = Get-Service -Name ServiceMonitor.* $successCount = 0 $failureCount = 0 $svcs | ForEach-Object { try { # 添加-ErrorAction Stop强制将非终止错误转为终止错误,让catch能捕获 Restart-Service -Name $_.name -ErrorAction Stop $successCount++ } catch { $failureCount++ # 可选:输出具体错误信息,不需要可以注释掉 Write-Warning "服务$($_.TargetObject.Name)重启失败:$($_.Exception.Message)" } } # 输出最终统计结果 Write-Output "$successCount个成功、$failureCount个失败"
关键改动说明
- 增加
-ErrorAction Stop参数:让Restart-Service遇到错误时抛出终止错误,确保catch块能捕获到禁用服务这类异常。 - 新增计数变量:统计成功和失败的服务数量,最后统一输出汇总结果,符合你要的“1个失败、1个成功”的需求。
- 用
Write-Warning输出错误细节(可选):既保留错误信息,又不会产生未捕获的错误提示。
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

