Debug degli script
Gli script eseguiti all'interno di Universal vengono eseguiti all'interno di processi in background o runspace, il che può rendere difficile il debug di ciò che accade all'interno di uno script. È possibile utilizzare cmdlet come Write-Debug e Write-Verbose per fornire maggiori informazioni nei log per app e job.
Debugger remoto di Visual Studio
Utilizzando l'estensione PowerShell Universal per Visual Studio Code, è possibile connettersi direttamente agli script PowerShell in esecuzione in PowerShell Universal.
Debugger integrato
Il debugger integrato è supportato in PowerShell 7 e negli ambienti integrati. Non è supportato in Windows PowerShell.
Il debugger integrato consente di accedere a una console di debug per gli script in esecuzione. È possibile includere la chiamata al cmdlet Wait-Debugger negli script e questi passeranno allo stato In Breakpoint. Una volta che ciò avviene, è possibile visualizzare il Job per eseguire comandi sullo script.
Script
PowerShell Universal si integra direttamente con il debugger di PowerShell. È possibile includere Wait-Debugger negli script per farli mettere in pausa.
Ad esempio, si supponga di avere uno script che include una chiamata Wait-Debugger. La prima riga verrà eseguita e poi lo script si metterà in pausa una volta raggiunta la seconda riga.
$Processes = Get-Process
Wait-DebuggerUna volta che uno script è in pausa, verrà visualizzato un terminale per il debug dello script.
È quindi possibile utilizzare i comandi di debug integrati per procedere passo a passo nello script.
App
È possibile utilizzare Wait-Debugger direttamente nelle app di PowerShell Universal. È possibile includere questo comando in gestori di eventi e dinamiche per mettere in pausa l'esecuzione dell'app e valutare lo stato corrente dello script.
Ad esempio, è possibile includere Wait-Debugger in una dinamica.
Il risultato è che l'app visualizzerà lo scheletro di caricamento perché il debugger di PowerShell si trova in un breakpoint.
All'interno della console di amministrazione, è possibile fare clic sulla scheda Debugger per visualizzare i breakpoint correnti su cui l'app è in attesa. Il debugger fornisce un terminale per valutare comandi sul runspace. È possibile utilizzare qualsiasi comando PowerShell standard. È inoltre possibile utilizzare gli strumenti di debug come l'esecuzione passo a passo e l'elenco del codice sorgente. Nella parte superiore della console sono disponibili alcuni pulsanti.
È possibile utilizzare comandi come Get-Variable per ottenere informazioni sullo stato delle variabili. Eseguire c per consentire all'endpoint di continuare l'esecuzione.
Registrazione degli script
Alcuni aspetti di Universal registrano automaticamente i propri script. Altre funzionalità potrebbero richiedere di effettuare la registrazione manualmente.
API
È possibile utilizzare la vista Live Log nella scheda Log per visualizzare i log dell'API selezionata.
Job
I job registrano in modo estensivo. Verranno visualizzati l'output della console e della pipeline. Se si impostano $DebugPreference o $VerbosePreference, tali stream verranno visualizzati anche nell'output della console. È possibile aggiungere ulteriori messaggi di log utilizzando Write-Debug o Write-Verbose.
App
Le app registrano nel proprio log messaggi informativi, di avviso e di errore. Si consiglia di utilizzare la registrazione all'avvio di un'app piuttosto che tentare di collegare un debugger. È inoltre possibile utilizzare la variabile $DebugPreference per ottenere informazioni aggiuntive durante l'avvio dell'app.
Autenticazione e autorizzazione
È possibile utilizzare la vista Live Log nelle pagine di autenticazione e dei ruoli per visualizzare l'output degli stream di PowerShell.
Debug degli script da una console PowerShell
È possibile eseguire il debug di qualsiasi script all'interno di Universal (o di qualsiasi processo PowerShell, in realtà) utilizzando i cmdlet di debug disponibili in PowerShell. Questi cmdlet consentono di connettersi a processi PowerShell locali, come Universal, e di procedere passo a passo negli script direttamente nel terminale.
Messa in pausa dello script
Innanzitutto, è necessario assicurarsi che lo script attenda il collegamento del debugger prima di continuare. Ciò significa che sarà necessario includere un comando Wait-Debugger da qualche parte nello script.
Esecuzione dello script
Ora che lo script è configurato per mettersi in pausa e attendere il debugger, si vorrà eseguire lo script. Per i job, è sufficiente avviare il job. Per le API, sarà necessario effettuare una richiesta all'API tramite l'endpoint che si desidera testare. Per le app, sarà necessario caricare la pagina nel browser. Per l'autenticazione e l'autorizzazione, sarà necessario effettuare l'accesso.
Individuazione dell'ID del processo
Una volta inserito il comando Wait-Debugger nello script di cui si desidera eseguire il debug, sarà necessario avviare lo script e determinare il processo all'interno del quale è in esecuzione.
Job
I job vengono eseguiti nel proprio processo isolato all'interno di Universal. È sufficiente avviare il job: verrà avviato il processo che attenderà in corrispondenza del comando Wait-Debugger. Una volta avviato il job, è possibile utilizzare il cmdlet Get-UAJob per individuare l'ID del processo di tale job.
API
Le API vengono eseguite in un unico processo PowerShell. Non viene avviato un nuovo processo per ogni chiamata API. È possibile individuare il processo dell'API cercando il processo pwsh o PowerShell la cui riga di comando include StartApi.
App
Le app vengono eseguite in un proprio processo PowerShell isolato. L'ID del processo è elencato nella tabella delle app all'interno della console di amministrazione.
Autenticazione e autorizzazione
Gli script di autenticazione e autorizzazione vengono eseguiti all'interno del server Universal. È possibile individuare il processo Universal.Server.exe e collegarsi a quello.
Ambiente integrato
Qualsiasi funzionalità in esecuzione all'interno dell'ambiente integrato verrà eseguita all'interno del processo Universal.Server.exe. Sarà necessario collegarsi a questo processo per eseguirne il debug.
Collegamento al processo e debug del runspace
Una volta individuato il processo al quale si desidera collegarsi, è possibile farlo utilizzando Enter-PSHostProcess. È sufficiente specificare l'ID del processo individuato nel passaggio precedente.
Una volta collegati al processo, si vorrà individuare il runspace in cui è in esecuzione il codice. Per farlo, è possibile utilizzare il cmdlet Get-Runspace. Questo restituirà un elenco dei runspace attualmente attivi nel processo. Cercare il runspace contrassegnato come InBreakpoint. Si tratta del runspace in attesa in corrispondenza del comando Wait-Debugger.
Ora che è stato individuato il runspace, utilizzare Debug-Runspace per collegarsi al runspace. Si avrà quindi la possibilità di impartire comandi di debug su tale runspace. È possibile visualizzare lo stato delle variabili, impartire comandi e persino procedere passo a passo nello script.
Per un elenco completo dei comandi di debug, è possibile consultare la documentazione Microsoft qui.
Esempio di connessione a un processo API
Di seguito è riportato un esempio di come connettersi a un processo API.
Debug con Visual Studio Code
Per eseguire il debug di uno script, è possibile utilizzare il cmdlet Wait-Debugger all'interno dello script per mettere in pausa lo script fino al collegamento di un debugger. È quindi possibile utilizzare un debugger, come VS Code, per collegarsi al processo e al runspace al fine di visualizzare le variabili, procedere passo a passo nel codice ed eseguire comandi di debug.
È inoltre possibile eseguire il debug degli script utilizzando i cmdlet integrati Enter-PSHostProcess, Get-Runspace e Debug-Runspace.
Ultimo aggiornamento
È stato utile?