You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:35:55