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

PowerShell终止错误未停止脚本?关于$ErrorActionPreference的疑问

PowerShell终止错误与$ErrorActionPreference的误区解析

核心认知误区:终止错误并非都会停止整个脚本

PowerShell里的「终止错误」实际分为两类,这是你产生疑问的关键:

  • 命令终止错误(Cmdlet-terminating errors):仅终止当前执行的单个命令,不会中断整个脚本的后续运行。比如用-ErrorAction Stop强制触发的错误,或是部分cmdlet自身设计为遇到错误就终止当前命令,但默认不影响脚本后续代码。
  • 脚本终止错误(Script-terminating errors):这类错误才会直接停止整个脚本执行,比如用throw主动抛出的错误、未被try/catch捕获的严重错误,或是通过$ErrorActionPreference = 'Stop'将非终止错误升级后的错误。

$ErrorActionPreference的实际作用范围

你之前认为它只影响非终止错误的认知有误,它的作用覆盖两类错误:

  1. 控制非终止错误的显示与处理逻辑
  2. 影响命令终止错误的脚本执行走向:
    • 设为'Silently Continue'时,命令终止错误会被静默处理,脚本继续执行后续代码(这就是你遇到的情况:触发终止错误后Write-Host '2'仍正常运行)
    • 设为'Stop'时,所有错误(包括非终止、命令终止)都会被升级为脚本终止错误,直接终止整个脚本

实际代码验证

例1:命令终止错误不中断脚本

# 默认$ErrorActionPreference为'Continue'
Get-Item -Path "不存在的路径" -ErrorAction Stop  # 触发命令终止错误
Write-Host '2'  # 此行会正常执行

例2:脚本终止错误中断脚本

throw "触发脚本终止错误"
Write-Host '2'  # 此行不会执行

例3:$ErrorActionPreference='Stop'升级错误

$ErrorActionPreference = 'Stop'
Get-Item -Path "不存在的路径"  # 原本是非终止错误,现在升级为脚本终止错误
Write-Host '2'  # 此行不会执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:01:13