# Manejo de excepciones

## Lanzamiento de excepciones

* El comando **throw "Ocurrió un problema"** crea una excepción y detiene la ejecución del script.
* El cmdlet **Write-Error -Message "Houston, tenemos un problema." -ErrorAction Stop** muestra un error, y establecer **ErrorAction** en **Stop** hace que el script se detenga con este error.

## Manejo de excepciones

El principio de manejo de errores en PowerShell se basa en la siguiente estructura:

```powershell
try {
  # código donde puede ocurrir un error
}
catch {
  # código para manejar el error
}
finally {
  # código que se ejecuta siempre después de try/catch
}
```

* El código en el bloque `try` se ejecuta primero.
* Si durante la ejecución de `try` ocurre un error irrecuperable, el control se transfiere al bloque `catch`. En caso de que no haya errores, el bloque `catch` se omite.
* En el bloque `catch` está disponible la variable automática `$PSItem` (o `$_`) de tipo `ErrorRecord`, que contiene detalles de la excepción.
* El bloque `finally` se ejecuta siempre, independientemente de si ocurrió un error o no. Se utiliza para garantizar la ejecución de código importante, como cerrar conexiones o liberar recursos.
* Se puede usar simultáneamente `catch` y `finally`. Esto permite manejar errores y, al mismo tiempo, siempre ejecutar acciones de finalización, sin importar el resultado.

Ejemplo:

```powershell
try {
  throw "Ocurrió un problema"
}
catch {
  Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red
}
finally {
  Write-Host "Este bloque se ejecutará siempre"
}
```

En este ejemplo, la excepción se lanza a través de `throw`, luego se captura en `catch`, donde se muestra un mensaje de error, y después se ejecuta `finally`, donde se puede colocar el código de finalización.

Este modelo simplifica la escritura de scripts confiables con manejo de errores y limpieza de recursos.

Este enfoque hacia las excepciones ayuda a crear scripts de PowerShell más robustos y fáciles de mantener, minimizando interrupciones inesperadas y asegurando una respuesta oportuna a los errores.

Para más información, puede consultar el siguiente enlace:

{% embed url="<https://docs.microsoft.com/ru-ru/powershell/scripting/learn/deep-dives/everything-about-exceptions?view=powershell-7.1>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sherparpa.ru/es/sherpa-rpa/sherpa-designer/sherpa-designer-otvety-na-chasto-zadavaemye-voprosy/powershell/obrabotka-isklyuchenii.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
