powershell - try - ErrorActionPreference y ErrorAction SilentlyContinue para Get-PSSessionConfiguration
powershell use try catch (3)
Mi caso:
$ErrorActionPreference = "Stop";
"1 - $ErrorActionPreference;"
Get-ChildItem NoSuchFile.txt -ErrorAction SilentlyContinue;
"2 - $ErrorActionPreference;"
Get-ChildItem NoSuchFile.txt -ErrorAction Stop;
"3 - $ErrorActionPreference;"
Salida:
1 - Parar;
2 - Parar;
y muestra un error ...
Ahora,
$ErrorActionPreference = "Stop";
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"
Salida:
1 - Parar;
y muestra un error ...
¿Por qué no funciona -ErrorAction SilentlyContinue) para Get-PSSessionConfiguration?
Actualizar:
Ahora,
$ErrorActionPreference = "Continue"
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"
Salida:
1 - Continuar;
2 - Continuar;
Ahora,
$ErrorActionPreference = "SilentlyContinue"
"1 - $ErrorActionPreference;"
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
"2 - $ErrorActionPreference;"
Salida:
1 - SilentlyContinue;
2 - SilentlyContinue;
Esta referencia :
El parámetro omnipresente ErrorAction
se puede usar para silenciar errores que no terminan usando el valor del parámetro SilentlyContinue
y se puede usar para convertir errores que no terminan en errores de terminación usando el valor del parámetro Stop
. Sin embargo, no puede ayudarlo a ignorar los errores de terminación y, en este caso, Stop-Transcript arroja un error de terminación. Si desea ignorar, use un try / catch, por ejemplo:
try { Stop-Transcript } catch {}
Parece que se trata de una "excepción no controlada", lo que significa que el cmdlet mismo no se ha codificado para reconocer y manejar esa excepción. Explotó sin siquiera ejecutar su manejo interno de errores, por lo que la configuración -ErrorAction en el cmdlet nunca entró en juego.
Una solución para mí:
$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
O use try-catch
try {
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue)
}
catch {
}
¿No puedes usar el clásico 2>
operador de redirección?
(Get-PSSessionConfiguration -Name "MyShellUri" -ErrorAction SilentlyContinue) 2> $NULL
if(!$?){
''foo''
}
No me gustan los errores, así que los evito a toda costa.