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

PowerShell的CommandNotFoundException是终止性错误吗?

原因解析

这个差异是PowerShell的错误分级机制和try/catch的捕获逻辑共同导致的:

  1. 首先你观察到的第一个现象是对的:CommandNotFoundException默认属于语句终止错误,这类错误只会中断当前出错的单条语句的执行,不会影响后续语句运行,所以直接执行脚本时,报错后依然会打印Hello。
  2. try/catch块的捕获范围包含所有终止类错误(包括语句终止错误、全局终止错误),所以当你把nonexistingcommand放到try块内时,它抛出的语句终止错误会被匹配的catch块捕获。
  3. 你在catch块内调用了throw语句,这个操作会把捕获到的语句终止错误,升级为全局终止错误,这类错误会直接终止整个脚本的运行,自然就不会执行后续的echo "Hello"语句。

验证示例

你可以修改代码验证这个逻辑,比如去掉catch块内的throw:

try {
 nonexistingcommand
}
catch [System.Management.Automation.CommandNotFoundException] {
  Write-Host "成功捕获到命令不存在错误"
}
echo "Hello"

运行后你会看到捕获逻辑执行完成后,依然会正常打印Hello。

如果你不想让try捕获这类语句终止错误,也可以给命令显式指定ErrorAction参数:

try {
 nonexistingcommand -ErrorAction Continue
}
catch [System.Management.Automation.CommandNotFoundException] {
  Write-Host "这段捕获逻辑不会被触发"
}
echo "Hello"

这个代码的执行效果和你第一个脚本完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:39:05