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, puede conectarse directamente a sus scripts de PowerShell que se ejecutan en PowerShell Universal.
Depurador integrado
El depurador integrado es compatible con PowerShell 7 y los entornos integrados. No es compatible con Windows PowerShell.
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.
$Processes = Get-Process
Wait-DebuggerUna vez que un script está pausado, verá un terminal para depurar el script.

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

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.
El resultado es que la aplicación mostrará el esqueleto de carga porque el depurador de PowerShell está en un punto de interrupción.

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.
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.
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.
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í.
Ejemplo de conexión al proceso de la API
El siguiente es un ejemplo de cómo conectarse a un proceso de la API.
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.
Última actualización
¿Te fue útil?