Доступ к несуществующему свойству хеш-таблицы ведет себя по-разному в и из модуля - PullRequest
0 голосов
/ 26 ноября 2018

В скрипте PowerShell или в простом однофайловом модуле psm1, обращающемся к несуществующему свойству хеш-таблицы, возвращается $ null

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

Но когда этот код является частью правильного модуля с psd1манифест того же кода выдает исключение

Свойство NonExistentKey не может быть найдено для этого объекта.Убедитесь, что свойство существует.

Может быть, кто-то знает причину этого поведения и можно ли его изменить?

UPD: я знаю, что ContainsKey правильный путь, но это касается выполнения унаследованного кода и общего поведения в целом.

UPD2: Set-StrictMode действительно имел место.Спасибо всем!

1 Ответ

0 голосов
/ 26 ноября 2018

Как указано выше @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 :

... Когда включен строгий режим, Windows PowerShell генерирует ошибку завершения, когда содержимое выражения, сценария или блока сценариянарушает основные передовые правила кодирования.

Надеюсь, это поможет

...