访问不存在的 属性 哈希表在模块内外的行为不同
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.
希望对您有所帮助
在 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.
希望对您有所帮助