web-dev-qa-db-ja.com

Get-PSSessionConfigurationのErrorActionPreferenceおよびErrorAction SilentlyContinue

私の場合:

$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 {}
21
Kiquenet

私のための解決策:

$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 {

}
23
Kiquenet

それは「未処理の例外」であるように見えます。つまり、コマンドレット自体は、その例外を認識して処理するようにコーディングされていません。内部エラー処理を実行することなく破裂したため、コマンドレットの-ErrorAction設定は機能しませんでした。

1
mjolinor

ヒント#2

古典的な2>リダイレクト演算子を使用することはできません。

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

私はエラーが好きではないので、私は間違いなくそれらを避ける。

1
E.V.I.L.