2012-03-01 11 views
7

Sono abbastanza nuovo in Powershell e ho scritto degli script piuttosto grandi, vale a dire uno script che chiama altri script che hanno funzioni annidate in altre funzioni. Quando lancio questo script, a volte ho degli errori che non so da dove provengano. C'è un modo semplice per vedere dove termina questo script in modo che io possa risolvere l'errore?Come tracciare il flusso di script

risposta

12

È possibile utilizzare Set-PsDebug per arrivare PowerShell per l'uscita quasi ogni linea corre:

Set-PSDebug -Trace 1; 

L'unico inconveniente è probabilmente vi ritroverete con un sacco di uscita guadare attraverso ...

+0

Questo è esattamente quello che stavo cercando. Tuttavia, vedo il grande vantaggio nel capire come debugare correttamente, quindi ne esaminerò più avanti. –

0

Normalmente l'errore include lo script chiamante.

In caso contrario, è possibile provare a eseguire lo script di Window PowerShell ISE in modalità di debug. Questo ti consente di utilizzare punti di interruzione e passaggio del codice.

Artile sull'utilizzo della ISE per il debug:

ISE debugging

riguarda Arcass

4

Per il debug per vedere dove il vostro errore di sono provenienti da suggerisco di debug con l'ISE o con PowerGUI.

È inoltre possibile ottenere una trascrizione del proprio script utilizzando il cmdlet Start-Transcript che scriverà tutte le attività della console in un file. Quindi puoi inserire affermazioni come Write-Host "Doing XYZ" e quelle verranno visualizzate nel registro delle trascrizioni.

se si cattura eccezioni con un tentativo di cattura o di utilizzare una trappola è possibile scrivere il numero di riga e di colonna di eccezione in questo modo:

$ErrorActionPreference = 'Stop' 

trap { 
    Write-Host "Error on line $($_.InvocationInfo.ScriptLineNumber)" 
    exit 1 
} 

try { 
    Get-Item DoesntExist 
} catch { 
    Write-Host ("Error occurred on line: " + $_.InvocationInfo.ScriptLineNumber) 
} 

$_.InvocationInfo ha altri dettagli riguardo erano l'errore proviene.

Impostando $ErrorActionPreference = "Stop" si assicura che ogni errore fa scattare il blocco trap{}, che in questo caso, scrive la riga dello script avuto modo ed esce.

+0

Aggiunto altro sulla gestione degli errori 'trap {}', in quanto ciò consente di risolvere i problemi di qualsiasi errore senza bisogno di mettere 'try {} catch {}' su troppe dichiarazioni. –

Problemi correlati