私の場合:
$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-停止;
そしてエラーを表示...
Get-PSSessionConfigurationで(ErrorAction SilentlyContinue)が機能しないのはなぜですか?
更新:
さて、
$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 {}
私のための解決策:
$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 {
}
それは「未処理の例外」であるように見えます。つまり、コマンドレット自体は、その例外を認識して処理するようにコーディングされていません。内部エラー処理を実行することなく破裂したため、コマンドレットの-ErrorAction設定は機能しませんでした。
古典的な2>
リダイレクト演算子を使用することはできません。
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue) 2> $NULL
if(!$?){
'foo'
}
私はエラーが好きではないので、私は間違いなくそれらを避ける。