Cómo usar Try-Catch en PowerShell

Cómo usar Try-Catch en PowerShell
Errores son confusos y estresantes para todos los usuarios de computadoras; Con frecuencia son difíciles de leer, haciendo que se pregunte dónde salió mal el guión. También es posible que un script que se ejecuta una vez no vuelva a ejecutar. Puede haber algún problema que surja cuando menos lo espera. Por eso deberías incluir manejo de errores en cada Guión de PowerShell usted escribe.

PowerShell tiene algunas opciones excelentes para lidiar con errores. Incluso en el script más directo, puede administrar errores al tiempo que garantiza que un evento inesperado no cause un bloqueo del sistema. Al implementar el concepto de manejo de errores, los errores se pueden filtrar y mostrar que los hacen más fáciles de entender, agregando lógica adicional al proceso de gestión de errores. Intenta atrapar bloques se utilizan para manejar o responder a los errores de terminación en los scripts de PowerShell.

¿Qué es un bloque de intento en PowerShell?

Responderemos esta pregunta en esta sección:

A "intentar "bloque se usa para especificar una parte de un script donde PowerShell debe buscar problemas. El $ Error La variable automática primero almacena el error en sí mismo cuando el bloque de try encuentra un error. Después de eso, PowerShell busca un bloque de captura para manejar el error. PowerShell busca en los ámbitos de los padres un bloque de captura adecuado si el "intentar"La declaración no tiene un bloque de captura emparejado. El "finalmenteEl bloque se ejecuta después del bloque de captura, o si no se ha encontrado un bloque de captura apropiado. El error se escribe en el flujo de error si no se puede manejar.

A "Bloque de captura " comprende comandos para monitorear el error o restaurar el flujo esperado del script. Se pueden especificar los tipos de errores que se puede especificar un bloque de captura. Se incluyen varios tipos de errores en una declaración de prueba, y luego se utilizan múltiples bloques de captura para manejar esos errores.

A Bloque "Finalmente" se utiliza para liberar o liberar cualquier recurso que su script ya no requiera.

Sintaxis de prueba de try y finalmente en PowerShell

Una declaración de try se compone de un bloque de try, con uno o más bloques de "captura" y "finalmente". Debe tener al menos un bloque de "atrapar" o "finalmente" con cada declaración de intento en su script. Una lista de declaraciones encerrada en los soportes sigue la palabra clave de prueba.

intentar

El script envía el objeto de error desde el bloque de prueba a su bloque de captura emparejado si se produce un error de terminación mientras las declaraciones en la lista de instrucciones se están ejecutando. Los tipos de error se colocan dentro de los soportes, y los soportes más externos indican la opcionalidad del elemento.

El bloque de captura tiene una lista de instrucciones y una lista opcional para las definiciones de tipo de error. PowerShell busca el bloque de captura adecuado si se produce un error de terminación en el bloque de try. En caso de que se encuentre el bloque de prueba de try emparejado, el programa ejecutará las declaraciones de bloqueo de captura.

atrapar [[] [',' ]*]

Puede especificar uno o más tipos de errores en el bloque de captura. Estos errores son los .Excepción neta. Un bloque de captura funciona con excepciones de la especificada .Clase de excepción del marco neto y otras clases derivadas.

Si se especifica un tipo de error en un bloque de captura, entonces es responsabilidad del mismo bloque de captura para manejar ese error. Si no se define un tipo de error en el bloque de captura, manejará cualquier error que el bloque de try se encuentre. Una declaración de prueba puede tener numerosos bloques de captura para manejar diversos tipos de error. La palabra clave finalmente comprende una lista de instrucciones que se ejecuta cada vez que se ejecuta el script, ya sea que el bloque de try se ejecute sin error o si existe un error en una declaración de captura.

finalmente

Ejecución de una sola captura de prueba en el script de PowerShell

Ahora, veremos la implementación práctica del método Try-Catch. En primer lugar, abra su Windows PowerShell ISE y crear un nuevo archivo:

Escriba el siguiente código en este archivo y guarde este script PowerShell llamado "TestFile2.PS1"; Puedes nombrarlo como quieras.

Prueba NonsenseString
Catch "Se produjo un error."

PowerShell no reconoce la "no sensible" como cualquier objeto o comando, por lo que la declaración de captura se ejecutará después de ejecutar el script:

Ejecución de múltiples capturas de try en PowerShell

Se puede usar cualquier cantidad de bloques de captura con una declaración de prueba. En el ejemplo dado a continuación, agregamos un bloque de try que descarga "Mydoc.doc"Y tiene dos bloques de captura:

El primer bloque de captura tratará Sistema.IO.Ioexception y Sistema.Neto.WebException tipos de errores. No se proporciona el tipo de error en el segundo bloque de captura. Este bloque también es responsable de manejar cualquier otro error de terminación.

intentar
$ WC = sistema nuevo de objeto.Neto.Webclient
$ WC.DownloadFile ("http: // www.contoso.com/mydoc.doc "," e: \ download \ testfile.doc")
El archivo de escritura "se ha descargado con éxito !"

Catch [sistema.Neto.WebException], [Sistema.IO.Ioexception]
"No se puede descargar mydoc.doc de http: // www.contoso.comunicarse."

atrapar
"Se produjo un error que no pudo resolverse."

Guardar el código y ejecutarlo.

La salida declara que el "Mydoc.doc"El archivo se descarga con éxito en el"E: \ Descargar " carpeta:

Para verificar la existencia de los recién descargados "Mydoc.doc"Archivo, utilizaremos el"Get-Childitem" dominio. Este comando extraerá todos los elementos secundarios del "E: \ Descargar"Carpeta:

> Get-ChildItem "E: \ Descargar"

PowerShell utiliza la herencia para coincidir con los tipos de error. Se usa un bloque de captura en el ejemplo dado a continuación para atrapar un "Comando no encontrado" error:

Catch [sistema.Gestión.Automatización.CommandNotFoundException]
"Excepción hereditaria"

Aquí tenemos la excepción.

Extraer información de excepción en PowerShell

El error actual se puede obtener a través de ps, también conocido como $ Psitem, dentro de un bloque de captura. El objeto es del "Tipo de errorRecord,"Y contiene información sobre el error encontrado.

Prueba NonsenseString
atrapar
Hostor de escritura "Ocurrió un error:"
Escritura-anfitrión $ _

ahí tienes!

Conclusión

Los bloques de captura de try de PowerShell le permiten manejar los problemas de script y realizar varias operaciones dependiendo de los errores encontrados. No solo el mensaje de error se puede mostrar en el bloque de captura, sino que también puede incluir lógica para manejar el error y continuar ejecutando el script restante.

En este artículo, le hemos proporcionado diferentes métodos de Usar la captura de try en PowerShell. Estos métodos incluyen ejecutar una simple captura de prueba, múltiples declaraciones de prueba de prueba y extracción de información de excepción en PowerShell.