Manejo de errores usando el bloque Try-Catch en PowerShell
-
la variable
$ErrorActionPreference
en PowerShell -
el parámetro común
ErrorAction
en PowerShell -
Utilice el bloque
try-catch
de 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn