> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/es/desarrollo/debugging-scripts.md).

# Depuración de scripts

Los scripts que se ejecutan en Universal lo hacen dentro de procesos en segundo plano o runspaces, lo que puede dificultar la depuración de lo que ocurre dentro de un script. Puede utilizar cmdlets como Write-Debug y Write-Verbose para proporcionar más información en los registros de aplicaciones y trabajos.

## Depurador remoto de Visual Studio

Con la [extensión de Visual Studio Code de PowerShell Universal](/powershell-universal/es/desarrollo/visual-studio-code-extension.md), puede conectarse directamente a sus scripts de PowerShell que se ejecutan en PowerShell Universal.

## Depurador integrado

{% hint style="warning" %}
El depurador integrado es compatible con PowerShell 7 y los entornos integrados. No es compatible con Windows PowerShell.
{% endhint %}

El depurador integrado permite acceder a una consola de depuración para los scripts en ejecución. Puede incluir la llamada al cmdlet `Wait-Debugger` en sus scripts y estos pasarán a un estado In Breakpoint. Una vez que esto ocurra, podrá ver el trabajo para ejecutar comandos contra el script.

### Scripts

PowerShell Universal se integra directamente con el depurador de PowerShell. Puede incluir `Wait-Debugger` en sus scripts para provocar que se pausen.

Por ejemplo, suponga que tiene un script que incluye una llamada a `Wait-Debugger`. La primera línea se ejecutará y luego se pausará cuando llegue a la segunda línea.

<pre class="language-powershell"><code class="lang-powershell"><strong>$Processes = Get-Process
</strong><strong>Wait-Debugger
</strong></code></pre>

Una vez que un script está pausado, verá un terminal para depurar el script.

<figure><img src="/files/ttJ9XWRnNTOY2GXVmRAi" alt=""><figcaption><p>Terminal del depurador</p></figcaption></figure>

A continuación, puede utilizar los comandos de depuración integrados para recorrer el script paso a paso.

<figure><img src="/files/GoxEIXxxKEztfDJTjlYk" alt=""><figcaption><p>Comandos de depuración</p></figcaption></figure>

### Aplicaciones

Puede utilizar `Wait-Debugger` directamente en sus aplicaciones de PowerShell Universal. Puede incluir este comando en controladores de eventos y dinámicas para pausar la ejecución de la aplicación y evaluar el estado actual del script.

Por ejemplo, puede incluir `Wait-Debugger` en una dinámica.

```powershell
New-UDApp -Title 'PowerShell Universal' -Content {
     New-UDDynamic -Id 'dynamic' -Content {
        Wait-Debugger
        New-UDTypography "Loaded"
    } -LoadingComponent {
        New-UDSkeleton
    }
}
```

El resultado es que la aplicación mostrará el esqueleto de carga porque el depurador de PowerShell está en un punto de interrupción.

<figure><img src="/files/sTh8RarE23xtrsSVy8LV" alt=""><figcaption></figcaption></figure>

Dentro de la consola de administración, puede hacer clic en la pestaña Debugger para ver los puntos de interrupción actuales en los que la aplicación está esperando. El depurador proporciona un terminal para evaluar comandos contra el runspace. Puede utilizar cualquier comando estándar de PowerShell. También puede utilizar las herramientas de depuración, como el recorrido paso a paso y el listado del código fuente. Hay botones disponibles en la parte superior de la consola.

Puede utilizar comandos como `Get-Variable` para obtener información sobre el estado de las variables. Ejecute `c` para permitir que el endpoint continúe ejecutándose.

## Registro de scripts

Ciertos aspectos de Universal registrarán sus scripts automáticamente. Otras funciones pueden requerir que registre usted mismo.

### API

Puede utilizar la vista Live Log en la pestaña Log para ver los registros de la API seleccionada.

### Trabajos

Los trabajos registran información de forma exhaustiva. Verá la salida de la consola y de la canalización. Si establece `$DebugPreference` o `$VerbosePreference`, también verá esos flujos en la salida de la consola. Puede añadir mensajes de registro adicionales utilizando `Write-Debug` o `Write-Verbose`.

### Aplicaciones

Las aplicaciones registran mensajes informativos, de advertencia y de error en su registro. Se recomienda utilizar el registro al iniciar una aplicación en lugar de intentar adjuntar un depurador. También puede utilizar la variable `$DebugPreference` para obtener información adicional durante el inicio de su aplicación.

```powershell
$DebugPreference = 'Continue'

New-UDApp -Title 'Test' -Content {
    Write-Debug "My app is loading. I have am $user with $roles"

    New-UDTypography -Text 'Hello, world'
}
```

### Autenticación y autorización

Puede utilizar la vista Live Log en las páginas de autenticación y de roles para ver la salida de los flujos de PowerShell.

## Depuración de scripts desde una consola de PowerShell

Puede depurar cualquier script dentro de Universal (o cualquier proceso de PowerShell, en realidad) utilizando los cmdlets de depuración disponibles en PowerShell. Estos cmdlets le permiten conectarse a procesos locales de PowerShell, como Universal, y recorrer sus scripts paso a paso directamente en el terminal.

### Pausar el script

En primer lugar, deberá asegurarse de que el script espere a que conecte el depurador antes de continuar. Esto significa que deberá incluir un comando `Wait-Debugger` en algún punto de su script.

{% hint style="info" %}
Las aplicaciones solo esperarán 10 segundos durante el inicio, por lo que colocar un Wait-Debugger en ellas puede no funcionar. Debería recurrir al uso de $DebugPreference y Write-Debug para diagnosticar problemas de inicio de las aplicaciones.
{% endhint %}

### Ejecutar su script

Ahora que ha configurado su script para que se pause y espere al depurador, querrá ejecutar su script. Para los trabajos, simplemente inicie el trabajo. Para las API, deberá realizar una solicitud a la API a través del endpoint que está intentando probar. Para las aplicaciones, deberá cargar la página en su navegador. Para la autenticación y la autorización, deberá iniciar sesión.

### Encontrar su ID de proceso

Una vez que tenga su comando `Wait-Debugger` en el script que quiere depurar, deberá iniciar el script y determinar el proceso en el que se está ejecutando.

#### Trabajos

Los trabajos se ejecutan en su propio proceso aislado dentro de Universal. Todo lo que tendrá que hacer es iniciar el trabajo y este iniciará el proceso y esperará en su comando `Wait-Debugger`. Una vez que su trabajo se haya iniciado, puede utilizar el cmdlet `Get-UAJob` para encontrar el ID de proceso de ese trabajo.

#### API

Las API se ejecutan en un único proceso de PowerShell. No se inicia un nuevo proceso para cada llamada a la API. Puede localizar el proceso de la API buscando el proceso pwsh o PowerShell cuya línea de comandos incluya `StartApi`.

#### Aplicaciones

Las aplicaciones se ejecutan en su propio proceso aislado de PowerShell. El ID de proceso aparece en la tabla de aplicaciones dentro de la consola de administración.

#### Autenticación y autorización

Los scripts de autenticación y autorización se ejecutan dentro del servidor de Universal. Puede encontrar el proceso `Universal.Server.exe` y adjuntarse a él.

**Entorno integrado**

Cualquier función que se ejecute dentro del entorno integrado se ejecutará dentro del proceso `Universal.Server.exe`. Deberá adjuntarse a este proceso para poder depurarlas.

### Adjuntarse al proceso y depurar el runspace

Una vez que tenga el proceso al que quiere adjuntarse, puede hacerlo utilizando `Enter-PSHostProcess`. Simplemente especifique el ID de proceso que encontró en el paso anterior.

```powershell
Enter-PSHostProcess -id 1231
```

{% hint style="info" %}
Enter-PSHostProcess utiliza canalizaciones con nombre y requiere que tenga permiso sobre el proceso al que está accediendo. Si está ejecutando Universal como un servicio, puede que necesite ejecutarlo con su cuenta local para conectarse correctamente al proceso.
{% endhint %}

Una vez que se haya adjuntado al proceso, querrá encontrar el runspace donde se está ejecutando su código. Para ello, puede utilizar el cmdlet `Get-Runspace`. Esto devolverá una lista de los runspaces actualmente activos en su proceso. Busque el runspace marcado como `InBreakpoint`. Este es el runspace que está esperando en el comando `Wait-Debugger`.

Ahora que ha encontrado su runspace, utilice `Debug-Runspace` para adjuntarse al runspace. Ahora tendrá la oportunidad de emitir comandos de depuración contra ese runspace. Puede ver el estado de las variables, emitir comandos e incluso recorrer el script paso a paso.

Para obtener una lista completa de los comandos de depuración, puede consultar [la documentación de Microsoft aquí](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_debuggers?view=powershell-7#starting-and-stopping-the-debugger).

### Ejemplo de conexión al proceso de la API

El siguiente es un ejemplo de cómo conectarse a un proceso de la API.

```powershell
$Process = Get-Process pwsh | Where-Object { $_.CommandLine.Contains('StartApi') }
Enter-PSHostProcess -Id $Process.Id
Get-Runspace
Debug-Runspace -Id 2
```

## Depuración con Visual Studio Code

Para depurar un script, puede utilizar el cmdlet Wait-Debugger dentro de su script para pausarlo hasta que se adjunte un depurador. A continuación, puede utilizar un depurador, como VS Code, para adjuntarse al proceso y al runspace y ver variables, recorrer el código paso a paso y ejecutar comandos de depuración.

También puede depurar scripts utilizando los cmdlets integrados `Enter-PSHostProcess`, `Get-Runspace` y `Debug-Runspace`.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/es/desarrollo/debugging-scripts.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
