Set-PSBreakpoint

Imposta un punto di interruzione in 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 Set-PSBreakpoint cmdlet 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 viene arrestato in un altro punto di interruzione.

Set-PSBreakpoint impossibile 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 ed eseguire il debug in locale.

Ogni Set-PSBreakpoint comando 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 Set-PSBreakpoint comando, ma ogni Set-PSBreakpoint comando 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 diventano disponibili 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 Set-PSBreakpoint cmdlet è 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

Questo esempio imposta un punto di interruzione alla riga 5 nello script 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 Set-PSBreakpoint cmdlet 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 Increment funzione nel cmdlet Sample.ps1. L'esecuzione dello script viene arrestata 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 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 Sample.ps1. Usa il parametro Mode con un 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 DiskTest funzione nello Test.ps1 script solo quando il valore della $Disk variabile è maggiore di 2.

Set-PSBreakpoint -Script "test.ps1" -Command "DiskTest" -Action { if ($Disk -gt 2) { break } }

Il valore di Action è un blocco di script che verifica il valore della $Disk variabile nella funzione.

L'azione usa la break parola chiave per arrestare l'esecuzione se la condizione viene soddisfatta. L'alternativa (e l'impostazione predefinita) è Continua.

Esempio 6: Impostare un punto di interruzione su una funzione

In questo esempio viene impostato un punto di interruzione nella CheckLog funzione . Poiché il comando non specifica uno script, il punto di interruzione viene impostato su tutto ciò che viene eseguito nella sessione corrente. Il debugger si interrompe quando viene chiamata la funzione e 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 in corrispondenza della 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 che vengono eseguiti a ogni punto di interruzione anziché interrompere l'esecuzione. Immettere un blocco di script contenente i comandi. È possibile usare questo parametro per impostare punti di interruzione condizionali o eseguire altre attività, ad esempio test o registrazione.

Se questo parametro viene omesso o non viene specificata alcuna azione, l'esecuzione si arresta in corrispondenza del punto di interruzione e viene avviato il debugger.

Quando si usa il parametro Action , il blocco script Action viene eseguito in ogni punto di interruzione. L'esecuzione non viene arrestata, 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_Break e about_Continue.

Type:ScriptBlock
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Column

Specifica il numero di colonna della colonna nel file di script in cui l'esecuzione viene arrestata. Immettere solo un 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 Line specifica più righe, il parametro Column imposta un punto di interruzione in corrispondenza della 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 dall'inizio del margine superiore sinistro a partire dal numero di colonna 1 (non 0). Se si specifica una colonna che non esiste nello script, non viene generato un errore, ma il punto di interruzione non viene mai eseguito.

Type:Int32
Position:2
Default value:1
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Command

Imposta un punto di interruzione del comando. Immettere i nomi dei cmdlet, ad esempio Get-Process, o nomi di funzione. I caratteri jolly sono consentiti.

L'esecuzione si arresta appena prima dell'esecuzione di ogni istanza di ciascun comando. Se il comando è una funzione, l'esecuzione viene arrestata ogni volta che la funzione viene chiamata e in corrispondenza di ogni sezione BEGIN, PROCESS ed END.

Type:String[]
Aliases:C
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-Line

Imposta un punto di interruzione 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 dall'inizio del margine superiore sinistro del file di script a partire dal numero di riga 1 (non 0). Se si specifica una riga vuota, l'esecuzione viene arrestata prima della riga non vuota successiva. Se la riga non è compresa nell'intervallo, il punto di interruzione non viene mai raggiunto.

Type:Int32[]
Position:1
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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 Variable viene usato nel comando . La modalità si applica a tutti i punti di interruzione impostati nel comando. I valori validi per questo parametro sono:

  • Write : arresta l'esecuzione immediatamente prima che venga scritto 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 viene arrestata quando cambia il valore della variabile.
  • ReadWrite : arresta l'esecuzione quando la variabile viene letta o scritta.
Type:VariableAccessMode
Accepted values:Read, Write, ReadWrite
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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.

Type:Runspace
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Script

Specifica una matrice di file di script in cui questo cmdlet imposta un punto di interruzione. Immettere i percorsi e i nomi file di uno o più file di script. Se i file si trovano nella directory corrente, è possibile omettere il percorso. I caratteri jolly sono consentiti.

Per impostazione predefinita, i punti di interruzione variabile e i punti di interruzione comando vengono impostati in qualsiasi comando eseguito nella sessione corrente. Questo parametro è obbligatorio solo quando si imposta un punto di interruzione riga.

Type:String[]
Position:0
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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 Mode per determinare la modalità di accesso che attiva i punti di interruzione. La modalità predefinita, Write, arresta l'esecuzione appena prima che un nuovo valore venga scritto nella variabile.

Type:String[]
Aliases:V
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters: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 impossibile 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 ed eseguire 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 in una funzione o variabile al prompt dei comandi, è possibile impostare il punto di interruzione prima o dopo aver creato la funzione o la variabile.