Set-PSBreakpoint
Imposta un punto di interruzione su una riga, un comando o una variabile.
Sintassi
Set-PSBreakpoint
[-Action <ScriptBlock>]
[[-Column] <Int32>]
[-Line] <Int32[]>
[-Script] <String[]>
[-Runspace <Runspace>]
[<CommonParameters>]
Set-PSBreakpoint
[-Action <ScriptBlock>]
-Command <String[]>
[[-Script] <String[]>]
[-Runspace <Runspace>]
[<CommonParameters>]
Set-PSBreakpoint
[-Action <ScriptBlock>]
[[-Script] <String[]>]
-Variable <String[]>
[-Mode <VariableAccessMode>]
[-Runspace <Runspace>]
[<CommonParameters>]
Descrizione
Il cmdlet Set-PSBreakpoint
imposta un punto di interruzione in uno script o in qualsiasi comando eseguito nella sessione corrente. È possibile usare Set-PSBreakpoint
per impostare un punto di interruzione prima di eseguire uno script o eseguire un comando o durante il debug, quando si arresta in un altro punto di interruzione.
Set-PSBreakpoint
non è possibile impostare un punto di interruzione in un computer remoto. Per eseguire il debug di uno script in un computer remoto, copiare lo script nel computer locale e quindi eseguirne il debug in locale.
Ogni comando Set-PSBreakpoint
crea uno dei tre tipi di punti di interruzione seguenti:
- Punto di interruzione di riga: imposta i punti di interruzione in corrispondenza di coordinate di riga e colonna specifiche.
- Punto di interruzione dei comandi: imposta i punti di interruzione su comandi e funzioni.
- Punto di interruzione variabile: imposta i punti di interruzione sulle variabili.
È possibile impostare un punto di interruzione su più righe, comandi o variabili in un singolo comando Set-PSBreakpoint
, ma ogni comando Set-PSBreakpoint
imposta un solo tipo di punto di interruzione.
In un punto di interruzione PowerShell interrompe temporaneamente l'esecuzione e assegna il controllo al debugger. Il prompt dei comandi viene modificato in DBG\>
e un set di comandi del debugger diventa disponibile per l'uso. Tuttavia, è possibile usare il parametro Action per specificare una risposta alternativa, ad esempio condizioni per il punto di interruzione o istruzioni per eseguire attività aggiuntive, ad esempio la registrazione o la diagnostica.
Il cmdlet Set-PSBreakpoint
è uno dei diversi cmdlet progettati per il debug di script di PowerShell.
Per altre informazioni sul debugger di PowerShell, vedere about_Debuggers.
Esempio
Esempio 1: Impostare un punto di interruzione su una riga
In questo esempio viene impostato un punto di interruzione alla riga 5 dello script di Sample.ps1. Quando lo script viene eseguito, l'esecuzione viene arrestata immediatamente prima dell'esecuzione della riga 5.
Set-PSBreakpoint -Script "sample.ps1" -Line 5
Column : 0
Line : 5
Action :
Enabled : True
HitCount : 0
Id : 0
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
Quando si imposta un nuovo punto di interruzione in base al numero di riga, il cmdlet Set-PSBreakpoint
genera un oggetto punto di interruzione di riga (System.Management.Automation.LineBreakpoint) che include l'ID punto di interruzione e il numero di passaggi.
Esempio 2: Impostare un punto di interruzione su una funzione
In questo esempio viene creato un punto di interruzione del comando nella funzione Increment
nel cmdlet Sample.ps1. Lo script interrompe l'esecuzione immediatamente prima di ogni chiamata alla funzione specificata.
Set-PSBreakpoint -Command "Increment" -Script "sample.ps1"
Command : Increment
Action :
Enabled : True
HitCount : 0
Id : 1
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
Il risultato è un oggetto punto di interruzione del comando. Prima dell'esecuzione dello script, il valore della proprietà HitCount è 0.
Esempio 3: Impostare un punto di interruzione su una variabile
In questo esempio viene impostato un punto di interruzione nella variabile Server nello script di Sample.ps1. Usa il parametro Mode con il valore ReadWrite per arrestare l'esecuzione quando il valore della variabile viene letto e subito prima della modifica del valore.
Set-PSBreakpoint -Script "sample.ps1" -Variable "Server" -Mode ReadWrite
Esempio 4: Impostare un punto di interruzione in ogni comando che inizia con il testo specificato
In questo esempio viene impostato un punto di interruzione in ogni comando dello script Sample.ps1 che inizia con "write", ad esempio Write-Host
.
Set-PSBreakpoint -Script Sample.ps1 -Command "write*"
Esempio 5: Impostare un punto di interruzione in base al valore di una variabile
Questo esempio arresta l'esecuzione nella funzione DiskTest
nello script Test.ps1
solo quando il valore della variabile $Disk
è maggiore di 2.
Set-PSBreakpoint -Script "test.ps1" -Command "DiskTest" -Action { if ($Disk -gt 2) { break } }
Il valore del Action è un blocco di script che verifica il valore della variabile $Disk
nella funzione.
L'azione usa la parola chiave break
per arrestare l'esecuzione se la condizione viene soddisfatta. L'alternativa (e il valore predefinito) è Continua.
Esempio 6: Impostare un punto di interruzione su una funzione
In questo esempio viene impostato un punto di interruzione nella funzione CheckLog
. Poiché il comando non specifica uno script, il punto di interruzione viene impostato su qualsiasi elemento eseguito nella sessione corrente. Il debugger si interrompe quando viene chiamata la funzione, non quando viene dichiarata.
PS> Set-PSBreakpoint -Command "CheckLog"
Id : 0
Command : CheckLog
Enabled : True
HitCount : 0
Action :
function CheckLog {
>> get-eventlog -log Application |
>> where {($_.source -like "TestApp") -and ($_.Message -like "*failed*")}
>>}
>>
PS> CheckLog
DEBUG: Hit breakpoint(s)
DEBUG: Function breakpoint on 'prompt:CheckLog'
Esempio 7: Impostare punti di interruzione su più righe
In questo esempio vengono impostati tre punti di interruzione di riga nello script Sample.ps1. Imposta un punto di interruzione alla colonna 2 in ognuna delle righe specificate nello script. L'azione specificata nel parametro action si applica a tutti i punti di interruzione.
PS C:\> Set-PSBreakpoint -Script "sample.ps1" -Line 1, 14, 19 -Column 2 -Action {&(log.ps1)}
Column : 2
Line : 1
Action :
Enabled : True
HitCount : 0
Id : 6
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
Column : 2
Line : 14
Action :
Enabled : True
HitCount : 0
Id : 7
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
Column : 2
Line : 19
Action :
Enabled : True
HitCount : 0
Id : 8
Script : C:\ps-test\sample.ps1
ScriptName : C:\ps-test\sample.ps1
Esempio 8: Impostare un punto di interruzione in uno spazio di esecuzione
In questo esempio viene avviato un processo. Lo spazio di esecuzione viene archiviato in una variabile e passato al comando Set-PSBreakPoint
con il parametro runspace.
Start-Job -ScriptBlock {
Start-Sleep -Seconds 10
}
$runspace = Get-Runspace -Id 1
Set-PSBreakpoint -Command Start-Sleep -Runspace $runspace
Parametri
-Action
Specifica i comandi eseguiti in ogni punto di interruzione anziché interrompere. Immettere un blocco di script che contiene i comandi. È possibile usare questo parametro per impostare punti di interruzione condizionali o per eseguire altre attività, ad esempio test o registrazione.
Se questo parametro viene omesso o non viene specificata alcuna azione, l'esecuzione viene arrestata in corrispondenza del punto di interruzione e il debugger viene avviato.
Quando viene usato il parametro action, il blocco script Action viene eseguito in ogni punto di interruzione. L'esecuzione non si arresta a meno che il blocco di script non includa la parola chiave Break. Se si usa la parola chiave Continue nel blocco di script, l'esecuzione riprende fino al punto di interruzione successivo.
Per altre informazioni, vedere about_Script_Blocks, about_Breake about_Continue.
Tipo: | ScriptBlock |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Column
Specifica il numero di colonna della colonna nel file di script in cui viene arrestata l'esecuzione. Immettere un solo numero di colonna. Il valore predefinito è la colonna 1.
Il valore Column viene utilizzato con il valore del parametro Line per specificare il punto di interruzione. Se il parametro riga specifica più righe, il parametro colonna imposta un punto di interruzione nella colonna specificata in ognuna delle righe specificate. PowerShell interrompe l'esecuzione prima dell'istruzione o dell'espressione che include il carattere in corrispondenza della riga e della posizione della colonna specificata.
Le colonne vengono conteggiate dal margine superiore sinistro a partire dal numero di colonna 1 (non 0). Se si specifica una colonna che non esiste nello script, non viene dichiarato un errore, ma il punto di interruzione non viene mai eseguito.
Tipo: | Int32 |
Posizione: | 2 |
Valore predefinito: | 1 |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Command
Imposta un punto di interruzione del comando. Immettere i nomi dei cmdlet, ad esempio Get-Process
o i nomi delle funzioni. Sono consentiti caratteri jolly.
L'esecuzione viene arrestata subito prima dell'esecuzione di ogni istanza di ogni comando. Se il comando è una funzione, l'esecuzione viene arrestata ogni volta che viene chiamata la funzione e a ogni sezione BEGIN, PROCESS e END.
Tipo: | String[] |
Alias: | C |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | True |
-Line
Imposta un punto di interruzione di riga in uno script. Immettere uno o più numeri di riga, separati da virgole. PowerShell si arresta immediatamente prima di eseguire l'istruzione che inizia su ognuna delle righe specificate.
Le righe vengono conteggiate dal margine superiore sinistro del file di script che inizia con il numero di riga 1 (non 0). Se si specifica una riga vuota, l'esecuzione viene arrestata prima della riga successiva non vuota. Se la riga non è compreso nell'intervallo, il punto di interruzione non viene mai raggiunto.
Tipo: | Int32[] |
Posizione: | 1 |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Mode
Specifica la modalità di accesso che attiva i punti di interruzione delle variabili. Il valore predefinito è Write.
Questo parametro è valido solo quando il parametro Variabile viene usato nel comando . La modalità si applica a tutti i punti di interruzione impostati nel comando . I valori accettabili per questo parametro sono:
- write : arresta l'esecuzione immediatamente prima della scrittura di un nuovo valore nella variabile.
- Lettura - Arresta l'esecuzione quando la variabile viene letta, ovvero quando si accede al relativo valore, da assegnare, visualizzare o usare. In modalità di lettura, l'esecuzione non si arresta quando cambia il valore della variabile.
- ReadWrite - Arresta l'esecuzione quando la variabile viene letta o scritta.
Tipo: | VariableAccessMode |
Valori accettati: | Read, Write, ReadWrite |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Runspace
Specifica l'ID di un oggetto Runspace in modo da poter interagire con i punti di interruzione nello spazio di esecuzione specificato.
Questo parametro è stato aggiunto in PowerShell 7.2.
Tipo: | Runspace |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Script
Specifica una matrice di file di script in cui questo cmdlet imposta un punto di interruzione. Immettere i percorsi e i nomi di file di uno o più file di script. Se i file si trovano nella directory corrente, è possibile omettere il percorso. Sono consentiti caratteri jolly.
Per impostazione predefinita, i punti di interruzione delle variabili e i punti di interruzione dei comandi vengono impostati su qualsiasi comando eseguito nella sessione corrente. Questo parametro è obbligatorio solo quando si imposta un punto di interruzione di riga.
Tipo: | String[] |
Posizione: | 0 |
Valore predefinito: | None |
Necessario: | False |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
-Variable
Specifica una matrice di variabili su cui questo cmdlet imposta i punti di interruzione. Immettere un elenco delimitato da virgole di variabili senza segni di dollaro ($
).
Usare il parametro modalità per determinare la modalità di accesso che attiva i punti di interruzione. La modalità predefinita, Write, arresta l'esecuzione subito prima che venga scritto un nuovo valore nella variabile.
Tipo: | String[] |
Alias: | V |
Posizione: | Named |
Valore predefinito: | None |
Necessario: | True |
Accettare l'input della pipeline: | False |
Accettare caratteri jolly: | False |
Input
None
Non è possibile inviare tramite pipe oggetti a questo cmdlet.
Output
Set-PSBreakpoint
restituisce un oggetto che rappresenta ogni punto di interruzione impostato.
Note
PowerShell include gli alias seguenti per Set-PSBreakpoint
:
Tutte le piattaforme:
sbp
Set-PSBreakpoint
non è possibile impostare un punto di interruzione in un computer remoto. Per eseguire il debug di uno script in un computer remoto, copiare lo script nel computer locale e quindi eseguirne il debug in locale.Quando si imposta un punto di interruzione su più di una riga, un comando o una variabile,
Set-PSBreakpoint
genera un oggetto punto di interruzione per ogni voce.Quando si imposta un punto di interruzione su una funzione o una variabile al prompt dei comandi, è possibile impostare il punto di interruzione prima o dopo aver creato la funzione o la variabile.