访问不存在的 属性 哈希表在模块内外的行为不同

Accessing non-existent property of a hashtable behaves differently in and out of the module

在 PowerShell 脚本或简单的单文件 psm1 模块中访问不存在的 属性 哈希表 returns $null

$hashtable = @{}
$hashtable.NonExistentKey -eq $null # returns true

但是当此代码是具有 psd1 清单的正确模块的一部分时,相同的代码会抛出异常

The property 'NonExistentKey' cannot be found on this object. Verify that the property exists.

也许有人知道这种行为的原因是什么,是否可以改变?

UPD:我知道 ContainsKey 是正确的方法,但它涉及执行遗留代码和一般的不同行为。

UPD2: Set-StrictMode 确实如此。谢谢大家!

正如上面@Jeroen Mostert 所述,严格模式可能处于活动状态。

具有活动严格模式的 PowerShell 会话:

> Set-StrictMode -Version 2.0
> $d = @{}
> $d.SomeNotExistingKey
The property 'SomeNotExistingKey' cannot be found on this object. Verify that the property exists.
At line:1 char:1
+ $d.SomeNotExistingKey
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], PropertyNotFoundException
+ FullyQualifiedErrorId : PropertyNotFoundStrict

未启用严格模式的 PowerShell 会话:

> $d = @{}                    
> $d.SomeNotExistingKey      

来自MSDN

... When strict mode is on, Windows PowerShell generates a terminating error when the content of an expression, script, or script block violates basic best-practice coding rules.

希望对您有所帮助