Cómo suprimir errores de PowerShell

  1. Introducción a la Acción de Error en PowerShell
  2. Usar el Parámetro -ErrorAction en PowerShell
  3. Establecimiento de Preferencias de Acción de Error en PowerShell
  4. Usar el Parámetro de Declaración Try-Catch en PowerShell
  5. Conclusión
Cómo suprimir errores de PowerShell

Este artículo profundiza en el intrincado mundo del manejo de errores en PowerShell, explorando varios métodos como el parámetro -ErrorAction, estableciendo preferencias de acción de error y empleando la declaración Try-Catch. Cada uno de estos métodos tiene un propósito único, desde continuar la ejecución del script de manera silenciosa a pesar de los errores hasta implementar mecanismos sofisticados de manejo de errores.

Esta exploración detallada está diseñada para equipar tanto a nuevos como a experimentados guionistas con el conocimiento para tomar decisiones informadas sobre el manejo de errores en sus scripts de PowerShell, asegurando que puedan gestionar eficazmente situaciones inesperadas y mantener la integridad del script.

Introducción a la Acción de Error en PowerShell

A pesar de que es fácil suprimir errores de Windows PowerShell, hacerlo no siempre es la mejor opción (aunque puede serlo). Si le decimos descuidadamente a PowerShell que oculte errores, puede hacer que nuestro script se comporte de manera impredecible.

Suprimir mensajes de error también complica mucho la resolución de problemas y la recopilación de información. Así que camina con cuidado y ten cuidado al utilizar los siguientes fragmentos que verás en este artículo.

Usar el Parámetro -ErrorAction en PowerShell

El parámetro -ErrorAction en PowerShell está diseñado para dictar cómo responde un cmdlet a los errores de tiempo de ejecución. Por defecto, PowerShell mostrará errores en la consola y continuará la ejecución.

Sin embargo, en ciertos escenarios, puede que desees alterar este comportamiento; por ejemplo, suprimir mensajes de error o detener la ejecución cuando ocurre un error. Aquí es donde -ErrorAction se vuelve crucial.

Comando:

Get-Service 'svc_not_existing' -ErrorAction SilentlyContinue
Write-Host "This line will execute regardless of the above command's result."

En nuestro script, intentamos recuperar un servicio llamado 'svc_not_existing', un servicio que presumiblemente no existe. Al aplicar -ErrorAction SilentlyContinue, le instruimos a PowerShell que continúe sin interrupción, evitando la visualización de un mensaje de error si no puede localizar el servicio.

Posteriormente, nuestro script transita sin problemas al comando Write-Host. Este comando emite un mensaje específico en la consola.

Salida:

suprimir errores de powershell - salida 1

Establecimiento de Preferencias de Acción de Error en PowerShell

Si necesitamos que un script se comporte de cierta manera (como suprimir errores), podemos considerar la posibilidad de configurar algunas variables de preferencia. Las variables de preferencia actúan como configuraciones para PowerShell.

Podríamos usar una variable de preferencia para controlar el número de elementos de historial que PowerShell retiene o forzar a PowerShell a preguntar al usuario antes de realizar acciones específicas.

Por ejemplo, aquí tienes cómo puedes usar una variable de preferencia para establecer el parámetro -ErrorAction a SilentlyContinue para toda la sesión.

Comando:

$ErrorActionPreference = 'SilentlyContinue'
Get-Service 'nonexistent_service'
Write-Host "This message is displayed even if the previous command fails."

En nuestro script, comenzamos estableciendo $ErrorActionPreference a 'SilentlyContinue'. Esta acción asegura que la configuración se aplique a todos los comandos subsiguientes dentro de nuestro script.

Como resultado, cualquier error que normalmente surgiría se suprime de manera efectiva.

A continuación, empleamos el cmdlet Get-Service para intentar recuperar un servicio inexistente. En circunstancias normales, esto desencadenaría un error. Sin embargo, gracias a nuestra configuración anterior de $ErrorActionPreference, cualquier error que se habría generado permanece sin verse y sin ser intrusivo.

Después de esto, nuestro script avanza sin problemas al comando Write-Host. Este comando es responsable de mostrar un mensaje en la consola.

Salida:

suprimir errores de powershell - salida 2

Hay muchas otras acciones de error que podemos especificar para el parámetro switch ErrorAction.

  • Continue: PowerShell mostrará el mensaje de error, pero el script continuará ejecutándose.
  • Ignore: PowerShell no produce ningún mensaje de error, no escribe ninguna salida de error en el host y continúa la ejecución.
  • Stop: PowerShell mostrará el mensaje de error y detendrá la ejecución del script.
  • Inquire: PowerShell muestra el mensaje de error pero pedirá confirmación primero si el usuario desea continuar.
  • SilentlyContinue: PowerShell continúa silenciosamente con la ejecución del código si el código no funciona o tiene errores no terminantes.
  • Suspend: PowerShell suspende el flujo de trabajo del script.

Usar el Parámetro de Declaración Try-Catch en PowerShell

La declaración Try-Catch es una herramienta poderosa en PowerShell para gestionar y responder a errores de manera controlada y sofisticada. Permite a los guionistas tratar un bloque de código y capturar cualquier excepción (errores) que ocurra durante su ejecución.

Este enfoque es beneficioso cuando deseas manejar errores de manera elegante, realizar acciones específicas cuando ocurre un error o prevenir que los errores terminen abruptamente tu script.

Comando:

try {
    Get-Service 'nonexistent_service'
}
catch {
    Write-Host "An error occurred: $_"
}

En este script, primero encapsulamos un comando potencialmente propenso a errores, Get-Service 'nonexistent_service', dentro de un bloque try. Estamos intentando recuperar un servicio que probablemente no existe, lo que normalmente resultaría en un error.

Sin embargo, en lugar de permitir que este error termine el script o muestre una excepción no gestionada, lo capturamos. En el bloque catch, luego ejecutamos un comando Write-Host para mostrar un mensaje de error personalizado, incluyendo los detalles del error ($_ representa el objeto de error actual).

Salida:

suprimir errores de powershell - salida 3

Conclusión

Al concluir nuestro viaje a través de las diferentes facetas del manejo de errores en PowerShell, está claro que el poder de este lenguaje de scripting radica en su flexibilidad y profundidad. Desde la simplicidad del parámetro -ErrorAction hasta el control matizado que ofrecen las declaraciones Try-Catch, PowerShell proporciona un rico conjunto de herramientas para gestionar errores en una variedad de escenarios.

Comprender estas herramientas y saber cuándo aplicarlas es esencial para escribir scripts robustos y resilientes. Hemos explorado cómo suprimir errores puede ser tanto una bendición como un riesgo, dependiendo del contexto, y hemos visto cómo capturar errores para su análisis posterior.

Para este momento, deberías tener una comprensión completa de estos métodos y estar bien equipado para aplicarlos en tus esfuerzos de scripting.

¿Disfrutas de nuestros tutoriales? Suscríbete a DelftStack en YouTube para apoyarnos en la creación de más guías en vídeo de alta calidad. Suscríbete
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn