ErrorActionPreference и ErrorAction SilentlyContinue для Get-PSSessionConfiguration - программирование
Подтвердить что ты не робот

ErrorActionPreference и ErrorAction SilentlyContinue для Get-PSSessionConfiguration

Мой случай:

$ErrorActionPreference = "Stop";
"1 - $ErrorActionPreference;"
Get-ChildItem NoSuchFile.txt -ErrorAction SilentlyContinue;
"2 - $ErrorActionPreference;"
Get-ChildItem NoSuchFile.txt -ErrorAction Stop;
"3 - $ErrorActionPreference;"

Вывод:

1 - Остановить,
2 - Стоп,
и отобразить ошибку...

Теперь,

$ErrorActionPreference = "Stop";
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"

Вывод:

1 - Остановить,
и отобразить ошибку...

Почему не работает -ErrorAction SilentlyContinue) для Get-PSSessionConfiguration?

Update:

Теперь,

$ErrorActionPreference = "Continue"
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"

Вывод:

1 - Продолжить,
2 - Продолжить;

Теперь,

$ErrorActionPreference = "SilentlyContinue"
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"

Вывод:

1 - SilentlyContinue,
2 - SilentlyContinue;

Эта ссылка:

Вездесущий параметр ErrorAction может использоваться для отключения ошибок без завершения с использованием значения параметра SilentlyContinue и его можно использовать для преобразования ошибок без оканчивания в прерывание ошибок с использованием значения параметра Stop. Однако это не поможет вам игнорировать завершающие ошибки, и в этом случае Stop-Transcript выдает завершающую ошибку. Если вы хотите игнорировать, используйте try/catch, например:

try { Stop-Transcript } catch {}
4b9b3361

Ответ 1

Решение для меня:

$old_ErrorActionPreference = $ErrorActionPreference
$ErrorActionPreference = 'SilentlyContinue'
if((Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue) -eq $null) {
   WriteTraceForTrans "The session configuration MyShellUri is already unregistered."
}
else {        
   #Unregister-PSSessionConfiguration -Name "MyShellUri" -Force -ErrorAction Ignore
}
$ErrorActionPreference = $old_ErrorActionPreference 

Или используйте try-catch

try { 

(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)

} 
catch {

}

Ответ 2

Совет № 2

Нельзя использовать классический оператор перенаправления 2>.

(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue) 2> $NULL
if(!$?){
   'foo'
}

Мне не нравятся ошибки, поэтому я избегаю их любой ценой.

Ответ 3

Похоже, что это "необработанное исключение", означающее, что сам командлет не был закодирован, чтобы распознавать и обрабатывать это исключение. Он взорвался, не запустив внутреннюю обработку ошибок, поэтому параметр -ErrorAction в командлете никогда не включался.