web-dev-qa-db-fra.com

ErrorActionPreference et ErrorAction SilentlyContinue pour Get-PSSessionConfiguration

Mon cas:

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

Sortie:

1 - Arrêtez;
2 - Arrêtez;
et afficher une erreur ...

À présent,

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

Sortie:

1 - Arrêtez;
et afficher une erreur ...

Pourquoi ne fonctionne pas -ErrorAction SilentlyContinue) pour Get-PSSessionConfiguration?

Mise à jour:

À présent,

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

Sortie:

1 - Continuez;
2 - Continuer;

À présent,

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

Sortie:

1 - Continuez en silence;
2 - Continuez en silence;

Cette référence :

Le paramètre ErrorAction ubiquitaire peut être utilisé pour réduire au silence les erreurs non terminales à l'aide de la valeur de paramètre SilentlyContinue et il peut être utilisé pour convertir les erreurs non terminales en erreurs de terminaison à l'aide de la valeur de paramètre Stop. Cependant, cela ne peut pas vous aider à ignorer les erreurs de terminaison et dans ce cas, Stop-Transcript génère une erreur de terminaison. Si vous voulez ignorer, utilisez un try/catch par exemple:

try { Stop-Transcript } catch {}
21
Kiquenet

Une solution pour moi:

$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 

Ou utilisez try-catch

try { 

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

} 
catch {

}
23
Kiquenet

Il semble que ce soit une "exception non gérée", ce qui signifie que l'applet de commande elle-même n'a pas été codée pour reconnaître et gérer cette exception. Il a explosé sans jamais exécuter sa gestion interne des erreurs, de sorte que le paramètre -ErrorAction de la cmdlet n'est jamais entré en jeu.

1
mjolinor

Astuce # 2

Ne pouvez-vous pas utiliser le classique 2> opérateur de redirection.

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

Je n'aime pas les erreurs, je les évite à tout prix.

1
E.V.I.L.