trycatch try erroraction catch powershell error-handling silent

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


Consejo # 2

¿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.