, чтобы учесть тот факт, что в PS5.1 Get-ItemPropertyValue не поддерживает -errorAction: silentlyContinue
Действительно, в PowerShell Core 7.0.0-preview.1 / Windows PowerShell v5.1, Get-ItemPropertyValue
неожиданно сообщает о прекращающей оператор , а не не прекращающейся ошибке - и только последний тип ошибки может контролироваться с помощью общей ошибки
-ErrorAction
параметр .
Это проблемное поведение - ограничивается случаем, когда реестр значение (в отличие от содержащего ключ ) нене существует - было сообщено в об этой проблеме GitHub .
Только завершает ошибки, которые try
/ catch
может контролировать, ииспользование пустого блока catch
для завершающей ошибки является эквивалентом передачи -ErrorAction Ignore
командлету, выдающему не прекращающуюся ошибку .
Ваша единственная проблемаКак указывает Матиас Р. Джессен , вы ошиблисьприменил ваш оператор try
/ catch
в @{ ... }
- хеш-литерале - который сам вызвал ошибку завершения оператора.
Возможно, вы думали о $( ... )
, операторе подвыражения, котороеработать в этом случае, но его использование не является необходимым, поэтому достаточно следующее:
if ($value = try { Get-ItemPropertyValue "Registry::$nameKey" -name:AdskProductCode } catch{}) { ...
То есть вы можете напрямую использовать try
/ *Оператор 1052 * в виде выражения и, следовательно, присвоение его переменной.
Учитывая, что поведение Get-ItemPropertyValue
может - и, будем надеяться, - в конечном итоге будет исправлено,Однако я предлагаю другой подход:
Используйте взамен Get-ItemProperty
и получите доступ к имени значения интереса для результирующего объекта как свойства:
if ($value = (Get-ItemProperty "Registry::$nameKey").AdskProductCode) { ...
Примечание:
- Общее предположение состоит в том, что путь к ключу
"Registry::$nameKey"
существует (т. Е. Что только реестр значение может не существовать);чтобы игнорировать также отсутствие ключевого пути, используйте -ErrorAction Ignore
. - . Выше предполагается, что не действует ни строгий режим, ни версия с самым строгим режимом
1
. - Если, напротив, действует
Set-StrictMode -Version 2
или выше, не используйте прямой доступ к свойству и вместо него укажите Select-Object -ErrorAction Ignore -ExpandProperty AdskProductCode
.