Manejo de errores usando el bloque Try-Catch en PowerShell

  1. la variable $ErrorActionPreference en PowerShell
  2. el parámetro común ErrorAction en PowerShell
  3. Utilice el bloque try-catch de PowerShell
Manejo de errores usando el bloque Try-Catch en PowerShell

Los errores de código son con frecuencia difíciles de leer, lo que hace que sea casi imposible establecer qué y dónde salió mal el script. PowerShell tiene algunas opciones para mejorar el manejo de errores.

Este artículo analizará las Preferencias de acción de error en PowerShell y cómo podemos interceptarlas para realizar el manejo de errores utilizando los bloques Try-Catch de PowerShell (y los bloques Finally).

la variable $ErrorActionPreference en PowerShell

Las variables de preferencia son una noción en PowerShell y estas variables se usan para alterar el comportamiento de PowerShell de varias maneras. La variable $ErrorActionPreference, es una de estas variables.

La variable $ErrorActionPreference controla cómo PowerShell maneja los errores que no terminan. El valor $ErrorActionPreference se establece en "Continuar" de forma predeterminada.

Cuando la variable $ErrorActionPreference se establece en "Stop", PowerShell trata todos los errores como errores de terminación. Use el fragmento a continuación para cambiar el valor $ErrorActionPreference.

$ErrorActionPreference = "Stop"

el parámetro común ErrorAction en PowerShell

El parámetro ErrorAction se aplica a cualquier comando que admita parámetros comunes si el valor $ErrorActionPreference se aplica a la sesión de PowerShell. Los valores para el argumento ErrorAction son los mismos que para la variable $ErrorActionPreference.

El valor del parámetro ErrorAction tiene prioridad sobre el valor del parámetro $ErrorActionPreference.

Código de ejemplo:

$ErrorActionPreference = "Continue"
$files = Get-Content .\files.txt
foreach ($file in $files) {
    Write-Output "Reading file $file"
    # Use the -ErrorAction common parameter
    Get-Content $file -ErrorAction STOP
}

Después de ejecutar el código modificado, veremos que a pesar de que $ErrorActionPreference está configurado en "Continuar", el script aún finaliza una vez que encuentra un error. El script finalizó porque el valor del parámetro ErrorAction de PowerShell en Get-Content se estableció en "Stop".

Utilice el bloque try-catch de PowerShell

Ahora, es hora de que aprendamos sobre los bloques Try-Catch-Finally de PowerShell. Los bloques 'Try-Capture' (y opcionalmente 'Finally') de PowerShell le permiten envolver un bloque alrededor de un fragmento de código y detectar cualquier problema.

Código de ejemplo:

try {
    <statement list>
}
catch [[<error type>][',' <error type>]*]{
    <statement list>
}
finally {
    <statement list>
}

El código que queremos que PowerShell pruebe y controle las fallas está en el bloque Try. Si ocurre un error al ejecutar el código en el bloque Try, el error se guarda en la variable $Error y se reenvía al bloque Catch.

Cuando el bloque Try devuelve un error, el bloque Catch proporciona los pasos a seguir. Una instrucción Try puede contener varios bloques Catch.

Ese código se encuentra al final de la instrucción Try en el bloque Finally. Ya sea que el script haya contado un error o no, este bloque se ejecuta.

Una simple instrucción Try tiene dos bloques: un Try y un Catch. Finalmente es un bloque opcional.

La opción Capturar debe estar vacía para capturar una excepción no específica. El script en la parte variable $ErrorActionPreference del código de ejemplo a continuación se ajusta para usar los bloques Try Catch.

La declaración foreach ahora se incluye dentro del bloque Try a continuación. Un bloque 'Catch' contiene el código para mostrar la cadena "Ocurrió un error" si ocurre un error.

Por último, el código del bloque Finally borra la variable $Error.

Código de ejemplo:

$files = Get-Content .\files.txt
try {
    foreach ($file in $files) {
        Write-Output "Reading file $file"
        Get-Content $file -ErrorAction STOP
    }
}
catch {
    Write-Host "An Error Occured" -ForegroundColor RED
}
finally {
    $Error.Clear()
}

Producción :

An Error Occured
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn