Los errores de PowerShell son fáciles de eliminar, pero ¿debería hacerlo usted?

Hay un viejo refrán que dice que si ignoras algo el tiempo suficiente, eventualmente desaparecerá. Es cierto que este dicho no siempre es el mejor consejo en la vida cotidiana, pero tiene su lugar cuando se trata de PowerShell. Como alguien que escribe muchos scripts de PowerShell, me he encontrado con muchas situaciones en las que un script se descarrila por completo debido a un error inesperado. En algunos de estos casos, es bueno que el error haya provocado la detención del script; de lo contrario, el script habría causado daños. En otros casos, sin embargo, habría sido perfectamente aceptable que el script ignorara el error y continuara.

Ya sea que desee ignorar los mensajes de error o detener la ejecución de un script cuando ocurre un error, PowerShell tiene muchas opciones para lidiar con los errores. En este artículo, quiero mostrarte algunas de las técnicas que me gusta usar.

Antes de comenzar

Antes de comenzar, quiero señalar rápidamente que, aunque es realmente fácil suprimir los errores de PowerShell, hacerlo no siempre es la mejor opción (aunque puede serlo). Si le dice imprudentemente a PowerShell que ignore los errores, puede hacer que su script se comporte de manera impredecible. La supresión de los mensajes de error también dificulta mucho la resolución de problemas.

Acción de error

Probablemente, la técnica más común para tratar los errores es agregar el modificador ErrorAction a un cmdlet. El modificador ErrorAction le permite decirle a PowerShell qué hacer si el cmdlet produce un error.

Si su objetivo es suprimir un mensaje de error y hacer que parezca que no ha sucedido nada, la acción de error elegida es Continuar silenciosamente. Puede ver un ejemplo de cómo funciona esta acción de error en la imagen a continuación. Aquí estoy usando el Cmdlet Get-Process seguido de la letra X. Dado que no hay ningún proceso llamado X, el comando produce un error. Ese error desaparece cuando agrego la acción de error SilentlyContinue. El error aún ocurre, pero PowerShell simplemente lo ignora.

Errores de PowerShell
Errores de PowerShell y el uso excesivo de acciones de error

Hace un tiempo, vi un script que alguien había escrito en el que agregaba -ErrorAction SilentlyContinue a casi todos los cmdlet. En esa situación particular, el autor del script era nuevo en PowerShell y estaba tratando desesperadamente de hacer desaparecer los errores en un script.

No hace falta decir que ErrorAction nunca fue pensado como una panacea mágica para los scripts con errores. Aun así, puedo imaginar situaciones en las que un script se ha escrito bien, pero si ocurre un error, entonces ese error debe ocultarse al usuario final. Sin embargo, en una situación como esta, hay una opción más eficaz que simplemente agregar el modificador ErrorAction a cada cmdlet.

Si necesita que un script se comporte de cierta manera (como suprimir cualquier error que ocurra), entonces podría considerar configurar algunas variables de preferencia. Las variables de preferencia funcionan como opciones de configuración para PowerShell. Por ejemplo, puede usar una variable de preferencia para controlar la cantidad de elementos del historial que PowerShell retiene o para obligar a PowerShell a preguntar “¿está seguro?” Antes de realizar determinadas acciones. Así es como puede usar una variable de preferencia para configurar ErrorAction en SilentlyContinue durante toda la sesión:

$ErrorActionPreference = ‘SilentlyContinue’

Puede ver un ejemplo de cómo funciona esto en la imagen a continuación. Tenga en cuenta que el último comando que se muestra en la imagen no incluye una acción de error, pero el error se suprime de cualquier manera debido a la variable de preferencia de acción de error que se ha declarado.

Errores de PowerShell
Por cierto, hay muchas otras acciones de error que puede especificar además de SilentlyContinue. No entraré en todos ellos, pero estos son algunos de los más útiles:

  • Continuar: PowerShell muestra el mensaje de error, pero el script continúa ejecutándose.
  • Detener: PowerShell muestra el mensaje de error y deja de ejecutar el script.
  • Preguntar: PowerShell muestra el mensaje de error pero le pregunta si desea continuar.

Hay otra razón por la que es posible que desee utilizar una variable de preferencia de acción de error en lugar de confiar en el modificador ErrorAction. Como se mencionó anteriormente, el modificador ErrorAction debe usarse junto con un cmdlet de PowerShell. Anteriormente, por ejemplo, usé el cmdlet Get-Process para demostrar cómo funciona el modificador ErrorAction.

El problema con esto es que no todo lo que hace en PowerShell implica el uso de un cmdlet. Se pueden realizar operaciones matemáticas simples sin la ayuda de un cmdlet. Del mismo modo, puede asignar una variable sin utilizar un cmdlet. Esto significa que no puede agregar el modificador ErrorAction a este tipo de operaciones. Aunque no puede agregar el modificador ErrorAction, puede usar una variable de preferencia de acción de error para suprimir los errores que se producen cuando no se usan cmdlets. Dejame mostrarte un ejemplo.


En la primera línea de la captura de pantalla anterior, ingresé 2/0, que le dice a PowerShell que divida dos por cero. Dado que dividir por cero es una imposibilidad matemática, PowerShell muestra un error.

A continuación, intenté dividir por cero nuevamente, pero esta vez conecté el interruptor ErrorAction. Sin embargo, debido a que el modificador ErrorAction debe agregarse a un cmdlet y no se usa ningún cmdlet, el comando produjo un error que indica que ErrorAction no está permitido.

El tercer comando que ingresé establece la variable de preferencia de acción de error en SilentlyContinue, y la cuarta línea intenta dividir dos por cero una vez más. Esta vez se suprime el error. En otras palabras, la variable de preferencia de acción de error puede suprimir errores en situaciones en las que el conmutador ErrorAction no lo es.

Errores de PowerShell: déjalos ser

Por lo general, es mejor permitir que PowerShell siga adelante y muestre los errores que puedan ocurrir. Después de todo, es importante saber cuándo algo no está funcionando bien. Si necesita suprimir un error, puede usar el modificador ErrorAction para suprimir un error para un solo cmdlet o una variable de preferencia ErrorAction para suprimir errores globalmente.

Imagen destacada: Shutterstock


Vistas de publicaciones:
23

Más Conceptos básicos de PowerShell artículos



Leave a Reply

Your email address will not be published. Required fields are marked *