В сценарии PowerShell или простом однофайловом модуле psm1 доступ к несуществующему свойству хеш-таблицы возвращает $ null.
$hashtable = @{}
$hashtable.NonExistentKey -eq $null # returns true
Но когда этот код является частью правильного модуля с манифестом psd1, тот же код выдает исключение.
Свойство NonExistentKey не может быть найдено для этого объекта. Убедитесь, что свойство существует.
Может кто знает, в чем причина такого поведения и можно ли его изменить?
UPD: я знаю, что ContainsKey - правильный способ, но он касается выполнения устаревшего кода и другого поведения в целом.
UPD2: Set-StrictMode действительно имел место. Спасибо всем!
Set-StrictMode
. Скорее всего, этот модуль активен (и это хорошая практика). Используйте.ContainsKey
, чтобы проверить, есть ли ключ, прежде чем обращаться к нему. - person Jeroen Mostert   schedule 26.11.2018ContainsKey()
именно для этой цели. - person Ansgar Wiechers   schedule 26.11.2018Set-StrictMode -Off
. Его эффекты ограничены, поэтому при необходимости вы можете применять его выборочно. Существует довольно много способов настроить строгий режим и установить предпочтение по умолчанию, поэтому в модуле никогда не стоит полагаться на какой-либо конкретный режим, который действует. - person Jeroen Mostert   schedule 26.11.2018