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

PowerShell哈希表Add方法重复键错误类型及捕获疑问

PowerShell哈希表Add方法重复键错误的类型解析

当使用PowerShell哈希表的Add方法添加重复键时,会触发MethodInvocationException,示例如下:

PS(5.1.19041) C:\Users> $h = @{}
PS(5.1.19041) C:\Users> $h.add('a',$null)
PS(5.1.19041) C:\Users> $h.add('a',$null)
Exception calling "Add" with "2" argument(s): "Item has already been added. Key in dictionary: 'a'  Key being added: 'a'"
At line:1 char:1
+ $h.add('a',$null)
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentException

针对你的技术疑问,逐一解答:

1. 该错误属于终止错误还是非终止错误?

这个错误属于非终止错误。PowerShell默认会将.NET方法抛出的异常包装为非终止错误,不会中断后续代码的执行,这也是test-ht函数触发错误后仍能输出finished的原因。

2. 若为非终止错误,为何try/catch能抑制异常信息?

PowerShell的try/catch并非仅能捕获终止错误,它可以捕获所有可被PowerShell识别为可捕获的错误——包括默认状态下的非终止错误(只要该错误源自.NET异常或符合PowerShell的可捕获错误标准)。将Add方法调用放入try块时,PowerShell会将这个非终止错误视为可捕获异常,进入catch块处理,从而抑制了默认的错误输出。

3. 若为终止错误,为何test-ht函数在添加重复键后仍能执行完成?

该错误本身是非终止错误,默认不会中断执行流程。而使用-ErrorAction Stop时,相当于强制将这个非终止错误转换为终止错误,此时PowerShell会中断后续代码执行,函数也就提前终止了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:45:45