LastExitCode en PowerShell
-
Uso de
$?
en un Entorno de PowerShell -
$LastExitCode
como Manejador de Errores en PowerShell - Conclusión

Entender las complejidades del manejo de errores en PowerShell es esencial para la creación de scripts efectivos. Entre las diversas herramientas disponibles, $LastExitCode
se destaca como un mecanismo poderoso para capturar el código de salida de comandos externos.
Este artículo profundiza en el uso matizado de $LastExitCode
, explorando su aplicación en diferentes escenarios, desde la verificación básica de errores hasta la ejecución dinámica de comandos. Al dominar $LastExitCode
, los usuarios de PowerShell pueden mejorar la robustez y fiabilidad de sus scripts.
Uso de $?
en un Entorno de PowerShell
Es importante entender el comando $?
antes de usarlo aquí. En PowerShell, $?
es una variable automática que ayuda a determinar el éxito o fracaso de la última operación y puede ser utilizada como un manejador de errores.
Basado en el último comando ejecutado, devuelve un valor booleano, True
o False
. Si el último comando ejecutado en el script es exitoso, devuelve true
; de lo contrario, devuelve false
.
Una ejecución de este comando se muestra en el código de ejecución a continuación.
Remove-Item -Path "example.txt"
if ($?) {
Write-Host "File removed successfully."
}
else {
Write-Host "Failed to remove file."
}
En este ejemplo, primero intentamos eliminar un archivo llamado example.txt
. Después de ejecutar el comando Remove-Item
, usamos la variable $?
en la declaración if
para verificar si la operación fue exitosa.
Si $?
evalúa a True
, imprimimos un mensaje de éxito; de lo contrario, imprimimos un mensaje de fallo.
Hay una diferencia entre $lastexitcode
y $?
. Sin embargo, también se utiliza para el manejo de errores.
$LastExitCode
como Manejador de Errores en PowerShell
Hay una diferencia en el manejo de errores utilizado cuando el comando es interno y cuando el comando es externo.
Usará $lastexitcode
cuando el comando sea externo. Esto se debe a que este comando se aplica únicamente a scripts y comandos externos.
El propósito principal de $LastExitCode
es proporcionar retroalimentación sobre el éxito o fracaso de los comandos externos ejecutados dentro de una sesión de PowerShell. Al acceder a $LastExitCode
, los usuarios pueden determinar si el último comando ejecutado tuvo éxito o encontró un error.
Ejemplo:
# Execute an external command (ping)
ping example.test
# Check the value of $LastExitCode
$exitCode = $LastExitCode
# Output the exit code
Write-Host "Exit code: $exitCode"
En este ejemplo, intentamos hacer ping a un host llamado example.test
. Después de ejecutar el comando ping
, almacenamos el valor de $LastExitCode
en una variable llamada $exitCode
.
Finalmente, output el código de salida usando el cmdlet Write-Host
. Este enfoque nos permite acceder y utilizar el código de salida del último comando ejecutado directamente dentro de nuestro script de PowerShell.
Salida:
$LastExitCode
Con Invoke-Expression
como Manejador de Errores en PowerShell
En PowerShell, el cmdlet Invoke-Expression
permite la ejecución de comandos o scripts almacenados en variables de cadena. Cuando se combina con $LastExitCode
, proporciona una forma de capturar el código de salida de comandos ejecutados dinámicamente.
Ejemplo:
# Define a command as a string
$command = "ping example.test"
# Execute the command using Invoke-Expression
Invoke-Expression -Command $command
# Capture the exit code using $LastExitCode
$exitCode = $LastExitCode
# Output the exit code
Write-Host "Exit code: $exitCode"
En este ejemplo, definimos un comando (ping example.test
) como una variable de cadena $command
. Luego usamos Invoke-Expression
para ejecutar el comando almacenado en $command
.
Después de la ejecución, capturamos el código de salida usando $LastExitCode
y lo almacenamos en la variable $exitCode
. Finalmente, output el código de salida en la consola.
Salida:
Cuando el script anterior fue true
, la salida de $LastExitCode
siempre sería 0.
Pero, cuando no es exitoso, sería 1 o cualquier otro entero devuelto por el script externo porque el comando $LastExitCode
no es binario, a diferencia del comando $?
.
$LastExitCode
Con Verificaciones Condicionales como Manejador de Errores en PowerShell
Las declaraciones condicionales nos permiten tomar decisiones basadas en el éxito o fracaso de comandos dentro de un script de PowerShell. Veamos cómo podemos aprovechar $LastExitCode
dentro de estas declaraciones para implementar un manejo de errores robusto y lógica condicional.
Ejemplo:
# Execute an external command (ping)
ping example.test
# Check the value of $LastExitCode
if ($LastExitCode -eq $null) {
Write-Host "No exit code available. An external command might not have been executed."
}
else {
Write-Host "Exit code: $LastExitCode"
}
En este ejemplo, intentamos hacer ping a un host llamado example.test
. Después de ejecutar el comando ping
, verificamos el valor de $LastExitCode
.
Si $LastExitCode
es nulo, indica que el comando ping
podría no haberse ejecutado, posiblemente debido a un nombre de host inválido o a un problema de red. De lo contrario, imprimimos el código de salida, proporcionando información sobre el éxito o fracaso del comando ping
.
Salida:
Conclusión
Este artículo ha proporcionado una visión general comprensiva sobre la utilización de $LastExitCode
como un manejador de errores en la creación de scripts de PowerShell. Exploramos su uso en varios contextos, incluyendo la verificación básica de errores con $?
, el manejo de errores para comandos externos con $LastExitCode
, la ejecución dinámica de comandos con Invoke-Expression
, y las verificaciones condicionales.
Al dominar estas técnicas, los usuarios de PowerShell pueden mejorar sus capacidades de scripting, asegurando una detección y manejo de errores robustos en sus scripts. Para profundizar aún más su comprensión, considere explorar temas avanzados como la captura de errores y el manejo de escenarios de error específicos.
Con un sólido dominio de las técnicas de manejo de errores en PowerShell, estará bien preparado para desarrollar scripts confiables y resilientes para diversas tareas de automatización.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.