Condividi tramite


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-Processo 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

CommandBreakpoint

LineBreakpoint

VariableBreakpoint

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.