un error en un script de PowerShell impedirá que se complete correctamente. El uso del manejo de errores con los bloques try catch permite administrar y responder a estos errores de terminación. En este post cubriré los conceptos básicos de los bloques try/catch y cómo encontrar y manejar mensajes de excepción específicos.
entendiendo la sintaxis
la sintaxis del bloque try catch es muy simple., Se compone de dos secciones encerradas entre corchetes con la primera identificada como el bloque try y la segunda como el bloque catch.
try { # Statement to try}catch { # What to do with terminating errors}
el bloque try puede tener tantas instrucciones como quiera; sin embargo, recomendaría mantenerlo en el menor número posible, probablemente solo una sola instrucción. El punto de manejo de errores es trabajar con una instrucción a la vez y lidiar con cualquier cosa que ocurra con ella.
Este es un ejemplo de un error que se produce en la consola de PowerShell., Aquí estoy creando un nuevo archivo usando el cmdlet New-Item y especificando una carpeta inexistente para la ruta:
Si esto estaba en un script, enviarlo a la pantalla desperdiciaría algo de espacio y el problema puede no ser inmediatamente visible. Usando un bloque try catch, puedo empezar a manipular la salida de error y hacerlo más amigable con el administrador.
Aquí está nuestro mismo comando New-Item en un bloque try catch. Tenga en cuenta que en la línea 2 tuve que agregar el parámetro ErrorAction con un valor de Stop al comando., No todos los errores se consideran «terminación», por lo que a veces necesito agregar este bit de código para terminar correctamente en el bloque catch.
Ahora, en lugar de un bloque de color rojo enojado-mirando de texto, tengo un simple mensaje de advertencia que se encontró con un problema. El nombre de Ruta inexistente junto con forcing-ErrorAction Stop suelta la lógica en el bloque catch y muestra mi advertencia personalizada.
usando la Variablerror
aunque más legible, esto no es muy útil., Todo lo que sé es que el comando no se completó con éxito pero no se por qué. En lugar de mostrar mi mensaje personalizado, puedo mostrar el mensaje de error específico que se produjo en lugar de todo el bloque de excepción de texto rojo. Cuando se produce un error en el bloque try, se guarda en la variable llamada Error Error. La variable Error Error contiene una matriz de errores recientes, y puedo hacer referencia al error más reciente de la matriz en el índice 0.,
la salida de advertencia ahora es más descriptiva, mostrando que el comando falló porque no pudo encontrar parte de la ruta. Este mensaje era parte de nuestro mensaje de error original, pero ahora es más conciso.
usando mensajes de excepción
También puedo usar varios bloques de captura en caso de que quiera manejar errores específicos de manera diferente. Aquí voy a mostrar dos mensajes personalizados diferentes, uno para si la ruta no existe y otro para si se usa un carácter ilegal en el nombre., Tenga en cuenta que en la siguiente captura de pantalla ejecuté el script dos veces con dos comandos diferentes en el bloque try. Cada comando, bloque de captura y salida final se indican con las flechas naranja y verde.
Buscando en las líneas 14-16, hay un tercer bloque catch sin un mensaje de excepción. Este es un bloque catch «catch-all» que se ejecutará si el error no coincide con ninguna otra excepción de bloque catch., Si estoy ejecutando este script y veo el mensaje en el último bloque catch, entonces sé que el error no está relacionado con un carácter ilegal en el nombre del archivo o parte de la ruta que no es válida.
Ahora, ¿cómo sabía los mensajes de excepción para usar en los dos primeros bloques de captura? Esto se puede encontrar mirando la diferente información adjunta a la variable Error Error. Después de que ocurra un comando fallido, puedo ejecutar Error Error.Salvedad.GetType().FullName para ver el mensaje de excepción del último error que ocurrió.,
volviendo a la consola de PowerShell, volví a escanear el comando New-Item con una ruta de acceso inexistente y, a continuación, ejecuté mi comando Error Error para encontrar el mensaje de excepción.
El texto en rojo inmediatamente después del error de comando también contiene el mensaje de excepción, pero no contiene el módulo es de. Mirando la variable Error Error se muestra el mensaje completo que se utilizará para un bloque catch.,
usar bloques try / catch da poder adicional en el manejo de errores en un script y tomar diferentes acciones basadas en el error. El bloque catch puede mostrar algo más que un mensaje de error. Puede contener lógica que resolverá el error y continuará ejecutando el resto del script.