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

PowerShell中try catch无法捕获Get-Process报错问题咨询

问题根因

  • PowerShell 中将异常分为终止异常和非终止异常两类,try/catch 块默认仅能捕获终止异常
  • Get-Process 命令未找到指定ID的进程时,默认抛出的是非终止异常,不会触发catch块,只会直接在控制台输出报错信息

修复方案

要让这类报错被catch块捕获,只需强制将命令的报错转为终止异常即可,常用两种实现方式:

方式1:给单条命令追加错误处理参数

在Get-Process命令后添加 -ErrorAction Stop 参数,仅让该条命令的报错转为终止异常,对其他命令无影响,修改后的代码片段如下:

Get-Process -Id ($Process -split(":") | Select-Object -Last 1) -ErrorAction Stop | Write-Output $_ 

方式2:修改当前作用域的全局错误处理偏好

如果希望当前脚本内所有命令的报错都触发终止异常,可以在try块的开头添加如下配置:

$ErrorActionPreference = 'Stop'

该配置仅在当前函数/脚本的作用域内生效,不会修改系统全局的PowerShell错误处理规则。

额外优化建议

你当前catch块内直接拼接字符串的写法会将内容输出到管道,若需要直接在控制台打印报错,可以调整为:

catch {
    Write-Host "Es ist ein Problem aufgetreten: $_"
}

$_ 在catch块内可以直接获取到当前触发的异常对象,不需要额外拼接全局的$Error数组。


内容的提问来源于stack exchange,提问作者Keeran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:36:02