2013-03-21 27 views
16

Mój przypadek:ErrorActionPreference i ErrorAction SilentlyContinue Get-PSSessionConfiguration

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

wyjściowa:

1 - Stop;
2 - Stop;
i wyświetli komunikat o błędzie ...

Teraz

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

wyjściowa:

1 - Stop;
i wyświetli komunikat o błędzie ...

Dlaczego nie działa -ErrorAction SilentlyContinue) przez Get-PSSessionConfiguration?

Aktualizacja:

Teraz

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

wyjściowa:

1 - kontynuacja;
2 - Kontynuuj;

Teraz

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

wyjściowa:

1 - SilentlyContinue;
2 - SilentlyContinue;

Ten reference:

ErrorAction wszechobecne parametr może być używany do milczenia błędy nie kończące użyciu wartości parametru SilentlyContinue i może być użyty do konwersji nie kończące błędów błędów kończących użyciu wartości parametru Stop . Nie może to jednak pomóc w zignorowaniu błędów związanych z zakończeniem i w takim przypadku funkcja Stop-Transcript wyrzuca błąd zakończenia. Jeśli chcesz ignorować, należy użyć try/catch np .:

try { Stop-Transcript } catch {} 

Odpowiedz

18

Rozwiązanie dla mnie:

$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 

Albo użyć try-catch

try { 

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

} 
catch { 

} 
+4

Nie wiedziałem, że '-ErrorAction Stop' jest nadal potrzebny do' catch', aby uzyskać wyjątek: | – AceMark

0

Wygląda na to, że AN „nieobsługiwany wyjątek”, czyli komandlet sama nie został zakodowany rozpoznać i obsługi tego wyjątku. Wysypał się, nigdy nie uruchamiając wewnętrznej obsługi błędów, więc ustawienie -ErrorAction w cmdlecie nigdy nie wchodziło w grę.

1

Tip #2

nie można użyć klasycznego operatora 2> przekierowania.

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

Nie lubię błędów, więc unikam ich za wszelką cenę.