Informace o ladicích programech

STRUČNÝ POPIS

Popisuje ladicí program PowerShellu.

DLOUHÝ POPIS

Ladění je proces zkoumání spuštěného skriptu za účelem identifikace a opravy chyb v pokynech skriptu. Ladicí program PowerShellu vám může pomoct prozkoumat a identifikovat chyby a nedostatky ve skriptech, funkcích, příkazech, pracovních postupech PowerShellu, konfiguracích Desired State Configuration (DSC) PowerShellu nebo výrazech.

Od verze PowerShell 5.0 se ladicí program PowerShellu aktualizoval na ladění skriptů, funkcí, pracovních postupů, příkazů, konfigurací nebo výrazů spuštěných v konzole nebo Windows PowerShell ISE ve vzdálených počítačích. Spuštěním příkazu Enter-PSSession můžete spustit interaktivní vzdálenou relaci PowerShellu, ve které můžete nastavit zarážky a ladit soubory skriptů a příkazy na vzdáleném počítači. Enter-PSSession Funkce byla aktualizována tak, abyste se mohli znovu připojit k odpojené relaci, která spouští skript nebo příkaz na vzdáleném počítači, a přejít do této relace. Pokud spuštěný skript dosáhne zarážky, relace klienta automaticky spustí ladicí program. Pokud odpojená relace, ve které běží skript, již narazila na zarážku a je zastavena na zarážce, Enter-PSSession po opětovném připojení k relaci automaticky spustí ladicí program příkazového řádku.

Ladicí program PowerShellu můžete použít také k ladění pracovních postupů PowerShellu v konzole PowerShellu nebo v Windows PowerShell ISE. Od PowerShellu 5.0 můžete ladit v rámci spuštěných úloh nebo procesů, a to místně nebo vzdáleně.

Funkce ladicího programu PowerShellu můžete použít k prozkoumání skriptu, funkce, příkazu, pracovního postupu nebo výrazu PowerShellu za běhu. Ladicí program PowerShellu obsahuje sadu rutin, které umožňují nastavit zarážky, spravovat zarážky a zobrazit zásobník volání.

Rutiny ladicího programu

Ladicí program PowerShellu obsahuje následující sadu rutin:

  • Set-PSBreakpoint: Nastaví zarážky na řádcích, proměnných a příkazech.
  • Get-PSBreakpoint: Získá zarážky v aktuální relaci.
  • Disable-PSBreakpoint: Vypne zarážky v aktuální relaci.
  • Enable-PSBreakpoint: Znovu povolí zarážky v aktuální relaci.
  • Remove-PSBreakpoint: Odstraní zarážky z aktuální relace.
  • Get-PSCallStack: Zobrazí aktuální zásobník volání.

Spuštění a zastavení ladicího programu

Pokud chcete spustit ladicí program, nastavte jednu nebo více zarážek. Potom spusťte skript, příkaz nebo funkci, které chcete ladit.

Když dosáhnete zarážky, provádění se zastaví a řízení se předá ladicímu programu.

Pokud chcete ladicí program zastavit, spusťte skript, příkaz nebo funkci, dokud se neskončí. Nebo zadejte stop nebo t.

Příkazy ladicího programu

Při použití ladicího programu v konzole PowerShellu můžete spuštění řídit pomocí následujících příkazů. V Windows PowerShell ISE použijte příkazy v nabídce Ladit.

Poznámka: Informace o tom, jak používat ladicí program v jiných hostitelských aplikacích, najdete v dokumentaci k hostitelské aplikaci.

  • s, StepInto: Spustí další příkaz a pak se zastaví.

  • v, StepOver: Spustí další příkaz, ale přeskočí funkce a volání. Přeskočené příkazy se spustí, ale neprovedou se.

  • Ctrl+Break: (Break All in ISE) Rozdělí se do spuštěného skriptu buď v konzole PowerShellu, nebo Windows PowerShell ISE. Všimněte si, že ctrl+break v Windows PowerShell 2.0, 3.0 a 4.0 zavře program. Funkce Break All funguje u místních i vzdálených interaktivně spuštěných skriptů.

  • o, StepOut: Kroky z aktuální funkce; o jednu úroveň výš, pokud je vnořená. Pokud je v hlavním těle, pokračuje až do konce nebo další zarážky. Přeskočené příkazy se spustí, ale neprovedou se.

  • c, Continue: Poběží dál, dokud se skript nedokončuje nebo dokud se nedosáhne další zarážky. Přeskočené příkazy se spustí, ale neprovedou se.

  • l, List: Zobrazí část skriptu, která se spouští. Ve výchozím nastavení zobrazuje aktuální řádek, pět předchozích řádků a 10 dalších řádků. Chcete-li pokračovat ve výpisu skriptu, stiskněte klávesu ENTER.

  • l <m>, List: Zobrazí 16 řádků skriptu začínajících číslem řádku určeným parametrem <m>.

  • l <m> <n>, List: Zobrazí <n> řádky skriptu začínající číslem řádku určeným parametrem <m>.

  • q, , Stop: ExitZastaví spuštění skriptu a ukončí ladicí program. Pokud ladíte úlohu spuštěním Debug-Job rutiny , Exit příkaz odpojí ladicí program a umožní, aby úloha pokračovala v běhu.

  • k, Get-PsCallStack: Zobrazí aktuální zásobník volání.

  • <Enter>: Zopakuje poslední příkaz, pokud se jednalo o Krok (s), StepOver (v) nebo List (l). V opačném případě představuje akci odeslání.

  • ?, h: Zobrazí nápovědu k příkazu ladicího programu.

K ukončení ladicího programu můžete použít Stop (q).

Od PowerShellu 5.0 můžete spuštěním příkazu Exit ukončit vnořenou ladicí relaci, kterou jste spustili spuštěním příkazu nebo Debug-JobDebug-Runspace.

Pomocí těchto příkazů ladicího programu můžete spustit skript, zastavit se v okamžiku zájmu, prozkoumat hodnoty proměnných a stav systému a pokračovat ve spouštění skriptu, dokud nenajdete problém.

POZNÁMKA: Pokud zakročíte do příkazu s operátorem přesměrování, například ,> ladicí program PowerShellu provede kroky nad všemi zbývajícími příkazy ve skriptu.

Zobrazení hodnot proměnných skriptu

V ladicím programu můžete také zadávat příkazy, zobrazovat hodnoty proměnných, používat rutiny a spouštět skripty na příkazovém řádku.

Ve skriptu, který se ladí, můžete zobrazit aktuální hodnotu všech proměnných s výjimkou následujících automatických proměnných:

$_
$Args
$Input
$MyInvocation
$PSBoundParameters

Pokud se pokusíte zobrazit hodnotu některé z těchto proměnných, získáte hodnotu této proměnné pro v interním kanálu, který ladicí program používá, nikoli hodnotu proměnné ve skriptu.

Pokud chcete zobrazit hodnotu těchto proměnných pro laděný skript, přiřaďte ve skriptu hodnotu automatické proměnné nové proměnné. Pak můžete zobrazit hodnotu nové proměnné.

Třeba

$scriptArgs = $Args
$scriptArgs

V příkladu v tomto tématu je hodnota $MyInvocation proměnné znovu přiřazena následujícím způsobem:

$scriptname = $MyInvocation.MyCommand.Path

Prostředí ladicího programu

Když dosáhnete zarážky, přejdete do prostředí ladicího programu. Příkazový řádek se změní tak, že začíná na "[DBG]:". Pokud ladíte pracovní postup, zobrazí se výzva [WFDBG]. Výzvu můžete přizpůsobit.

Další informace o přizpůsobení výzvy najdete v tématu about_Prompts.

V některých hostitelských aplikacích, jako je například konzola PowerShellu (ale ne v integrovaném skriptovacím prostředí (ISE) Windows PowerShell), se také otevře vnořená výzva k ladění. Vnořenou výzvu můžete zjistit podle opakujících se znaků větších než (ASCII 62), které se zobrazí na příkazovém řádku.

Například toto je výchozí výzva k ladění v konzole PowerShellu:

[DBG]: PS (get-location)>>>

Úroveň vnoření můžete zjistit pomocí $NestedPromptLevel automatické proměnné.

Kromě toho je v místním oboru definována automatická proměnná $PSDebugContext. Přítomnost proměnné můžete použít $PsDebugContext k určení, zda jste v ladicím programu.

Příklad:

if ($PSDebugContext) {"Debugging"} else {"Not Debugging"}

V ladění můžete použít hodnotu $PSDebugContext proměnné .

[DBG]: PS>>> $PSDebugContext.InvocationInfo

Name   CommandLineParameters  UnboundArguments  Location
----   ---------------------  ----------------  --------
=      {}                     {}                C:\ps-test\vote.ps1 (1)

Ladění a obor

Rozdělením do ladicího programu se nezmění obor, ve kterém pracujete, ale když ve skriptu dosáhnete zarážky, přesunete se do oboru skriptu. Obor skriptu je podřízený oboru, ve kterém jste spustili ladicí program.

K vyhledání proměnných a aliasů, které jsou definované v oboru skriptu, použijte parametr Get-Alias Scope rutin nebo Get-Variable .

Například následující příkaz získá proměnné v místním oboru (script):

Get-Variable -scope 0

Příkaz můžete zkrátit takto:

gv -s 0

Jedná se o užitečný způsob, jak zobrazit pouze proměnné, které jste definovali ve skriptu a které jste definovali při ladění.

Ladění na příkazovém řádku

Když nastavíte zarážku proměnné nebo příkazovou zarážku, můžete zarážku nastavit jenom v souboru skriptu. Ve výchozím nastavení je ale zarážka nastavená na cokoli, co běží v aktuální relaci.

Pokud například nastavíte zarážku proměnné $name , ladicí program přeruší všechny $name proměnné v libovolném skriptu, příkazu, funkci, rutině skriptu nebo výrazu, který spustíte, dokud zarážku nevykážete nebo neodeberete.

To vám umožní ladit skripty v realističtějším kontextu, ve kterém mohou být ovlivněny funkcemi, proměnnými a dalšími skripty v relaci a v profilu uživatele.

Zarážky řádků jsou specifické pro soubory skriptů, takže se nastavují jenom v souborech skriptu.

Ladění pracovních postupů

Ladicí program PowerShellu 4.0 se dá použít k ladění pracovních postupů PowerShellu v konzole PowerShellu nebo v Windows PowerShell ISE. Použití ladicího programu PowerShellu k ladění pracovních postupů má určitá omezení.

  • Proměnné pracovního postupu můžete zobrazit v ladicím programu, ale nastavení proměnných pracovního postupu v ladicím programu není podporováno.
  • Dokončení tabulátoru při zastavení v ladicím programu pracovního postupu není k dispozici.
  • Ladění pracovních postupů funguje jenom se synchronním spouštěním pracovních postupů ze skriptu PowerShellu. Pracovní postupy nelze ladit, pokud jsou spuštěné jako úloha (s parametrem AsJob ).
  • Jiné vnořené scénáře ladění, například pracovní postup volající jiný pracovní postup nebo pracovní postup volající skript, nejsou implementovány.

Následující příklad ukazuje ladění pracovního postupu. Když ladicí program přejde do funkce pracovního postupu, výzva ladicího programu se změní na [WFDBG].

PS C:> Set-PSBreakpoint -Script C:\TestWFDemo1.ps1 -Line 8

ID Script           Line Command    Variable     Action
-- ------           ---- -------    --------     ------
0 TestWFDemo1.ps1   8

PS C:> C:\TestWFDemo1.ps1
Entering debug mode. Use h or ? for help.

Hit Line breakpoint on 'C:\TestWFDemo1.ps1:8'

At C:\TestWFDemo1.ps1:8 char:5
+     Write-Output -InputObject "Now writing output:"
# +!INCLUDE[]~~~~~

[WFDBG:localhost]: PS C:>> list

# 3:

4:  workflow SampleWorkflowTest
5:  {
6:      param ($MyOutput)
# 7:

8:*     Write-Output -InputObject "Now writing output:"
9:      Write-Output -Input $MyOutput
# 10:

11:      Write-Output -InputObject "Get PowerShell process:"
12:      Get-Process -Name powershell
# 13:

14:      Write-Output -InputObject "Workflow function complete."
15:  }
# 16:

17:  # Call workflow function
18:  SampleWorkflowTest -MyOutput "Hello"

[WFDBG:localhost]: PS C:>> $MyOutput
Hello
[WFDBG:localhost]: PS C:>> stepOver
Now writing output:
At C:\TestWFDemo1.ps1:9 char:5
+     Write-Output -Input $MyOutput
# +!INCLUDE[]~

[WFDBG:localhost]: PS C:>> list

4:  workflow SampleWorkflowTest
5:  {
6:      param ($MyOutput)
# 7:

8:      Write-Output -InputObject "Now writing output:"
9:*     Write-Output -Input $MyOutput
# 10:

11:      Write-Output -InputObject "Get PowerShell process:"
12:      Get-Process -Name powershell
# 13:

14:      Write-Output -InputObject "Workflow function complete."
15:  }
# 16:

17:  # Call workflow function
18:  SampleWorkflowTest -MyOutput "Hello"
# 19:


[WFDBG:localhost]: PS C:>> stepOver
Hello
At C:\TestWFDemo1.ps1:11 char:5
+     Write-Output -InputObject "Get PowerShell process:"
# +!INCLUDE[]~~~~~~~~~

[WFDBG:localhost]: PS C:>> stepOut
Get PowerShell process:

Handles  NPM(K)    PM(K)    WS(K) VM(M)   CPU(s)     Id ProcessName
-------  ------    -----    ----- -----   ------     -- -----------
    433      35   106688   128392   726     2.67   7124 powershell
    499      44   134244   172096   787     2.79   7452 powershell

Workflow function complete.

Funkce ladění

Když nastavíte zarážku u funkce, která má Beginoddíly , Processa End , ladicí program se přeruší na prvním řádku každého oddílu.

Příklad:

function test-cmdlet {
    begin {
        write-output "Begin"
    }
    process {
        write-output "Process"
    }
    end {
        write-output "End"
    }
}

C:\PS> Set-PSBreakpoint -command test-cmdlet

C:\PS> test-cmdlet

Begin
Entering debug mode. Use h or ? for help.

Hit Command breakpoint on 'prompt:test-cmdlet'

test-cmdlet

[DBG]: C:\PS> c
Process
Entering debug mode. Use h or ? for help.

Hit Command breakpoint on 'prompt:test-cmdlet'

test-cmdlet

[DBG]: C:\PS> c
End
Entering debug mode. Use h or ? for help.

Hit Command breakpoint on 'prompt:test-cmdlet'

test-cmdlet

# [DBG]: C:\PS>

Ladění vzdálených skriptů

Od PowerShellu 5.0 můžete spustit ladicí program PowerShellu ve vzdálené relaci v konzole nebo Windows PowerShell ISE. Enter-PSSession Funkce byla aktualizována tak, abyste se mohli znovu připojit k odpojené relaci, která běží na vzdáleném počítači a aktuálně spouští skript. Pokud spuštěný skript dosáhne zarážky, relace klienta automaticky spustí ladicí program.

Následující příklad ukazuje, jak to funguje se zarážkami nastavenými ve skriptu na řádcích 6, 11, 22 a 25. Všimněte si, že v příkladu se při spuštění ladicího programu zobrazí dvě výzvy k identifikaci: název počítače, na kterém je relace spuštěná, a výzva DBG, která vás upozorní, že jste v režimu ladění.

Enter-Pssession -Cn localhost
[localhost]: PS C:\psscripts> Set-PSBreakpoint .\ttest19.ps1 6,11,22,25

ID Script          Line     Command          Variable          Action
-- ------          ----     -------          --------          ------
0 ttest19.ps1          6
1 ttest19.ps1          11
2 ttest19.ps1          22
3 ttest19.ps1          25

[localhost]: PS C:\psscripts> .\ttest19.ps1
Hit Line breakpoint on 'C:\psscripts\ttest19.ps1:11'

At C:\psscripts\ttest19.ps1:11 char:1
+ $winRMName = "WinRM"
# + ~

[localhost]: [DBG]: PS C:\psscripts>> list

6:      1..5 | foreach { sleep 1; Write-Output "hello2day $_" }
7:  }
# 8:

9:  $count = 10
10:  $psName = "PowerShell"
11:* $winRMName = "WinRM"
12:  $myVar = 102
# 13:

14:  for ($i=0; $i -lt $count; $i++)
15:  {
16:      sleep 1
17:      Write-Output "Loop iteration is: $i"
18:      Write-Output "MyVar is $myVar"
# 19:

20:      hello2day
# 21:


[localhost]: [DBG]: PS C:\psscripts>> stepover
At C:\psscripts\ttest19.ps1:12 char:1
+ $myVar = 102
# + ~

[localhost]: [DBG]: PS C:\psscripts>> quit
[localhost]: PS C:\psscripts> Exit-PSSession
PS C:\psscripts>

Příklady

Tento testovací skript rozpozná verzi operačního systému a zobrazí zprávu odpovídající systému. Obsahuje funkci, volání funkce a proměnnou.

Následující příkaz zobrazí obsah souboru testovacího skriptu:

PS C:\PS-test>  Get-Content test.ps1

function psversion {
  "PowerShell " + $PSVersionTable.PSVersion
  if ($PSVersionTable.PSVersion.Major -lt 6) {
    "Upgrade to PowerShell 6.0!"
  }
  else {
    "Have you run a background job today (start-job)?"
  }
}

$scriptName = $MyInvocation.MyCommand.Path
psversion
"Done $scriptName."

Začněte tím, že nastavíte zarážku v bodě, který vás ve skriptu zajímá, například řádek, příkaz, proměnná nebo funkce.

Začněte vytvořením zarážky řádku na prvním řádku skriptu Test.ps1 v aktuálním adresáři.

PS C:\ps-test> Set-PSBreakpoint -line 1 -script test.ps1

Tento příkaz můžete zkrátit takto:

PS C:\ps-test> spb 1 -s test.ps1

Příkaz vrátí objekt line-breakpoint (System.Management.Automation.LineBreakpoint).

Column     : 0
Line       : 1
Action     :
Enabled    : True
HitCount   : 0
Id         : 0
Script     : C:\ps-test\test.ps1
ScriptName : C:\ps-test\test.ps1

Teď spusťte skript.

PS C:\ps-test> .\test.ps1

Když skript dosáhne první zarážky, zpráva o zarážce indikuje, že ladicí program je aktivní. Popisuje zarážku a zobrazí náhled prvního řádku skriptu, což je deklarace funkce. Příkazový řádek se také změní tak, aby indikoval, že ladicí program má kontrolu.

Řádek náhledu obsahuje název skriptu a číslo řádku příkazu s náhledem.

Entering debug mode. Use h or ? for help.

Hit Line breakpoint on 'C:\ps-test\test.ps1:1'

test.ps1:1   function psversion {
# DBG>

Pomocí příkazu Step (s) spusťte první příkaz ve skriptu a zobrazte náhled dalšího příkazu. Další příkaz používá automatickou $MyInvocation proměnnou k nastavení hodnoty $scriptName proměnné na cestu a název souboru skriptu.

DBG> s
test.ps1:11  $scriptName = $MyInvocation.MyCommand.Path

V tomto okamžiku $scriptName není proměnná naplněna, ale můžete ověřit hodnotu proměnné zobrazením její hodnoty. V tomto případě je $nullhodnota .

DBG> $scriptname
# DBG>

Pomocí jiného příkazu Step (s) spusťte aktuální příkaz a zobrazte náhled dalšího příkazu ve skriptu. Další příkaz volá funkci PsVersion.

DBG> s
test.ps1:12  psversion

V tomto okamžiku $scriptName je proměnná naplněna, ale hodnotu proměnné ověříte zobrazením její hodnoty. V tomto případě je hodnota nastavena na cestu ke skriptu.

DBG> $scriptName
C:\ps-test\test.ps1

Pomocí jiného příkazu Step spusťte volání funkce. Stiskněte klávesu ENTER nebo jako Krok zadejte "s".

DBG> s
test.ps1:2       "PowerShell " + $PSVersionTable.PSVersion

Zpráva ladění obsahuje náhled příkazu ve funkci. Pokud chcete spustit tento příkaz a zobrazit náhled dalšího příkazu ve funkci, můžete použít Step příkaz . V tomto případě ale použijte příkaz StepOut (o). Dokončí spuštění funkce (pokud nedosáhne zarážky) a kroky k dalšímu příkazu ve skriptu.

DBG> o
Windows PowerShell 2.0
Have you run a background job today (start-job)?
test.ps1:13  "Done $scriptName"

Vzhledem k tomu, že jsme na posledním příkazu ve skriptu, mají příkazy Step, StepOut a Continue stejný účinek. V tomto případě použijte StepOut (o).

Done C:\ps-test\test.ps1
PS C:\ps-test>

Příkaz StepOut provede poslední příkaz. Standardní příkazový řádek označuje, že ladicí program ukončil a vrátil řízení do procesoru příkazů.

Teď spusťte ladicí program znovu. Nejprve k odstranění aktuální zarážky použijte rutiny Get-PSBreakpoint a Remove-PSBreakpoint . (Pokud se domníváte, že byste zarážku mohli znovu použít, použijte rutinu Disable-PSBreakpoint místo rutiny Remove-PSBreakpoint.)

PS C:\ps-test> Get-PSBreakpoint| Remove-PSBreakpoint

Tento příkaz můžete zkrátit takto:

PS C:\ps-test> gbp | rbp

Nebo spusťte příkaz napsáním funkce, například následující funkce:

function delbr { gbp | rbp }

Teď vytvořte pro proměnnou zarážku $scriptname .

PS C:\ps-test> Set-PSBreakpoint -variable scriptname -script test.ps1

Příkaz můžete zkrátit takto:

PS C:\ps-test> sbp -v scriptname -s test.ps1

Teď spusťte skript. Skript dosáhne zarážky proměnné. Výchozí režim je Write, takže provádění se zastaví těsně před příkazem, který změní hodnotu proměnné.

PS C:\ps-test> .\test.ps1
Hit Variable breakpoint on 'C:\ps-test\test.ps1:$scriptName'
(Write access)

test.ps1:11  $scriptName = $MyInvocation.MyCommand.Path
# DBG>

Zobrazí aktuální hodnotu $scriptName proměnné, což je $null.

DBG> $scriptName
# DBG>

Pomocí příkazu Step (s) spusťte příkaz, který naplní proměnnou. Pak zobrazte novou hodnotu $scriptName proměnné.

DBG> $scriptName
C:\ps-test\test.ps1
```powershell

Use a Step command (s) to preview the next statement in the script.

```powershell
DBG> s
test.ps1:12  psversion

Dalším příkazem je volání funkce PsVersion. Pokud chcete funkci přeskočit, ale přesto ji spustit, použijte příkaz StepOver (v). Pokud jste již ve funkci při použití StepOveru, není efektivní. Zobrazí se volání funkce, ale neprovede se.

DBG> v
Windows PowerShell 2.0
Have you run a background job today (start-job)?
test.ps1:13  "Done $scriptName"

Příkaz StepOver spustí funkci a zobrazí náhled dalšího příkazu ve skriptu, který vytiskne poslední řádek.

Pomocí příkazu Stop (t) ukončete ladicí program. Příkazový řádek se vrátí na standardní příkazový řádek.

C:\ps-test>

Pokud chcete odstranit zarážky, použijte rutiny Get-PSBreakpoint a Remove-PSBreakpoint .

PS C:\ps-test> Get-PSBreakpoint| Remove-PSBreakpoint

Vytvořte novou zarážku příkazu pro funkci PsVersion.

PS C:\ps-test> Set-PSBreakpoint -command psversion -script test.ps1

Tento příkaz můžete zkrátit na:

PS C:\ps-test> sbp -c psversion -s test.ps1

Teď skript spusťte.

PS C:\ps-test> .\test.ps1
Hit Command breakpoint on 'C:\ps-test\test.ps1:psversion'

test.ps1:12  psversion
# DBG>

Skript dosáhne zarážky při volání funkce. V tomto okamžiku ještě nebyla volána funkce. Získáte tak možnost použít parametr Set-PSBreakpoint Action pro nastavení podmínek pro spuštění zarážky nebo provádění přípravných nebo diagnostických úloh, jako je spuštění protokolu nebo vyvolání diagnostického skriptu nebo skriptu zabezpečení.

Pokud chcete nastavit akci, pomocí příkazu Pokračovat (c) ukončete skript a Remove-PSBreakpoint pomocí příkazu odstraňte aktuální zarážku. (Zarážky jsou jen pro čtení, takže do aktuální zarážky nemůžete přidat akci.)

DBG> c
Windows PowerShell 2.0
Have you run a background job today (start-job)?
Done C:\ps-test\test.ps1

PS C:\ps-test> Get-PSBreakpoint| Remove-PSBreakpoint
PS C:\ps-test>

Teď vytvořte novou zarážku příkazu s akcí. Následující příkaz nastaví zarážku příkazu s akcí, která při zavolání funkce zaznamená hodnotu $scriptName proměnné. Vzhledem k tomu, že se v akci nepoužívá klíčové slovo Break, provádění se nezastaví. (Backtick (') je znak pokračování řádku.)

PS C:\ps-test> Set-PSBreakpoint -command psversion -script test.ps1  `
-action { add-content "The value of `$scriptName is $scriptName." `
-path action.log}

Můžete také přidat akce, které nastaví podmínky pro zarážku. V následujícím příkazu se zarážka příkazu spustí pouze v případě, že je zásada spouštění nastavená na RemoteSigned, která stále umožňuje spouštět skripty. (Znak pokračování (') je znak pokračování.)

PS C:\ps-test> Set-PSBreakpoint -script test.ps1 -command psversion `
-action { if ((Get-ExecutionPolicy) -eq "RemoteSigned") { break }}

Klíčové slovo Break v akci nasměruje ladicí program ke spuštění zarážky. Můžete také použít klíčové slovo Continue a nasměrovat ladicí program ke spuštění bez porušení. Vzhledem k tomu, že výchozí klíčové slovo je Pokračovat, je nutné zadat break, aby se zastavilo provádění.

Teď skript spusťte.

PS C:\ps-test> .\test.ps1
Hit Command breakpoint on 'C:\ps-test\test.ps1:psversion'

test.ps1:12  psversion

Vzhledem k tomu, že zásady spouštění jsou nastaveny na RemoteSigned, provádění se zastaví při volání funkce.

V tuto chvíli můžete zkontrolovat zásobník volání. Použijte rutinu Get-PsCallStack nebo Get-PsCallStack příkaz ladicího programu (k). Následující příkaz získá aktuální zásobník volání.

DBG> k
2: prompt
1: .\test.ps1: $args=[]
0: prompt: $args=[]

Tento příklad ukazuje jen několik z mnoha způsobů, jak použít ladicí program PowerShellu.

Další informace o rutinách ladicího programu potřebujete zadáním následujícího příkazu:

help <cmdlet-name> -full

Zadejte například:

help Set-PSBreakpoint -full

Další funkce ladění v PowerShellu

Kromě ladicího programu PowerShellu obsahuje PowerShell několik dalších funkcí, které můžete použít k ladění skriptů a funkcí.

  • Windows PowerShell ISE obsahuje interaktivní grafický ladicí program. Pokud chcete získat další informace, začněte Windows PowerShell ISE a stiskněte klávesu F1.

  • Rutina Set-PSDebug nabízí velmi základní funkce ladění skriptů, včetně krokování a trasování.

  • Pomocí rutiny Set-StrictMode můžete rozpoznat odkazy na neinicializované proměnné, odkazy na neexistující vlastnosti objektu a syntaxi funkce, která není platná.

  • Přidejte do skriptu diagnostické příkazy, například příkazy, které zobrazují hodnotu proměnných, příkazy, které čtou vstup z příkazového řádku, nebo příkazy, které hlásí aktuální instrukce. Použijte rutiny, které obsahují příkaz Write pro tento úkol, například Write-Host, Write-Debug, Write-Warninga Write-Verbose.

VIZ TAKÉ