2013-03-21 13 views
16

Il mio caso:ErrorActionPreference e ErrorAction SilentlyContinue per Get-PSSessionConfiguration

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

uscita:

1 - Stop;
2 - Stop;
e visualizzare un errore ...

Ora,

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

uscita:

1 - Stop;
e visualizzare un errore ...

Perché non funziona -ErrorAction SilentlyContinue) per Get-PSSessionConfiguration?

Aggiornamento:

Ora,

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

uscita:

1 - Continua;
2 - Continua;

Ora,

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

uscita:

1 - SilentlyContinue;
2 - SilentlyContinue;

Questo reference:

Il parametro onnipresente ErrorAction può essere usato per silenziare errori non terminano con il valore del parametro SilentlyContinue e può essere utilizzato per convertire non fatale errori di errori fatali utilizzando il valore di parametro Stop . Tuttavia, non può aiutarti a ignorare gli errori di terminazione e in questo caso Stop-Transcript sta generando un errore di chiusura. Se si desidera ignorare, utilizzare un try/catch es .:

try { Stop-Transcript } catch {} 

risposta

18

una soluzione per me:

$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 

Oppure utilizzare try-catch

try { 

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

} 
catch { 

} 
+4

non sapevo che '-ErrorAction Stop' è ancora necessario per' catch' per ottenere l'eccezione: | – AceMark

0

Sembra che è una "eccezione non gestita", che significa il cmdlet in sé non è stato codificato per riconoscere e gestire tale eccezione. Si è verificato senza aver prima eseguito la gestione degli errori interni, quindi l'impostazione -ErrorAction sul cmdlet non è mai stata utilizzata.

1

Tip #2

non è possibile utilizzare l'operatore di reindirizzamento 2> classica.

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

Non mi piacciono gli errori quindi li evito a tutti i costi.