Felsök skript i Windows PowerShell ISE
Den här artikeln beskriver hur du felsöker skript på en lokal dator med hjälp av felsökningsfunktionerna för visuell felsökning i Windows PowerShell Integrated Scripting Environment (ISE).
Hantera brytpunkter
En brytpunkt är en angiven plats i ett skript där du vill att åtgärden ska pausas så att du kan undersöka det aktuella tillståndet för variablerna och miljön där skriptet körs. När skriptet har pausats av en brytpunkt kan du köra kommandon i konsolfönstret för att undersöka tillståndet för skriptet. Du kan mata ut variabler eller köra andra kommandon. Du kan till och med ändra värdet för alla variabler som är synliga för kontexten för det skript som körs. När du har undersökt vad du vill se kan du återuppta skriptets drift.
Du kan ange tre typer av brytpunkter i Windows PowerShell-felsökningsmiljön:
Radbrytningspunkt. Skriptet pausar när den avsedda raden nås under skriptets drift
Variabel brytpunkt. Skriptet pausas när den avsedda variabelns värde ändras.
Kommandobrytpunkt. Skriptet pausas när det avsedda kommandot är på väg att köras under skriptets drift. Den kan innehålla parametrar för att ytterligare filtrera brytpunkten till den åtgärd som du vill använda. Kommandot kan också vara en funktion som du har skapat.
I windows PowerShell ISE-felsökningsmiljön kan endast radbrytningspunkter anges med hjälp av menyn eller kortkommandona. De andra två typerna av brytpunkter kan anges, men de anges från konsolfönstret med hjälp av cmdleten Set-PSBreakpoint . I det här avsnittet beskrivs hur du kan utföra felsökningsuppgifter i Windows PowerShell ISE med hjälp av menyerna där de är tillgängliga och utföra ett bredare utbud av kommandon från konsolfönstret med hjälp av skript.
Så här anger du en brytpunkt
En brytpunkt kan bara anges i ett skript när den har sparats. Högerklicka på den rad där du vill ange en radbrytningspunkt och klicka sedan på Växla brytpunkt. Eller klicka på raden där du vill ange en radbrytningspunkt och tryck på F9 eller klicka på Växla brytpunkt på felsökningsmenyn.
Följande skript är ett exempel på hur du kan ange en variabel brytpunkt från konsolfönstret med hjälp av cmdleten Set-PSBreakpoint .
# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
Set-PSBreakpoint -Script sample.ps1 -Variable Server
Visa en lista över alla brytpunkter
Visar alla brytpunkter i den aktuella Windows PowerShell-sessionen.
På felsökningsmenyn klickar du på Listbrytningspunkter. Följande skript är ett exempel på hur du kan lista alla brytpunkter från konsolfönstret med hjälp av cmdleten Get-PSBreakpoint .
# This command lists all breakpoints in the current session.
Get-PSBreakpoint
Ta bort en brytpunkt
Om du tar bort en brytpunkt tas den bort.
Om du tror att du kanske vill använda den igen senare kan du överväga att inaktivera en brytpunkt i stället. Högerklicka på raden där du vill ta bort en brytpunkt och klicka sedan på VäxlaBrytpunkt. Eller klicka på den rad där du vill ta bort en brytpunkt och klicka på Växla brytpunkt på felsökningsmenyn. Följande skript är ett exempel på hur du tar bort en brytpunkt med ett angivet ID från konsolfönstret med hjälp av cmdleten Remove-PSBreakpoint .
# This command deletes the breakpoint with breakpoint ID 2.
Remove-PSBreakpoint -Id 2
Ta bort alla brytpunkter
Om du vill ta bort alla brytpunkter som definierats i den aktuella sessionen klickar du på Ta bort alla brytpunkter på felsökningsmenyn.
Följande skript är ett exempel på hur du tar bort alla brytpunkter från konsolfönstret med hjälp av cmdleten Remove-PSBreakpoint .
# This command deletes all of the breakpoints in the current session.
Get-PSBreakpoint | Remove-PSBreakpoint
Inaktivera en brytpunkt
Att inaktivera en brytpunkt tar inte bort den. Den inaktiverar den tills den är aktiverad. Om du vill inaktivera en specifik radbrytningspunkt högerklickar du på raden där du vill inaktivera en brytpunkt och klickar sedan på Inaktivera brytpunkt.
Eller klicka på raden där du vill inaktivera en brytpunkt och tryck på F9 eller klicka på Inaktivera brytpunkt på felsökningsmenyn. Följande skript är ett exempel på hur du kan ta bort en brytpunkt med ett angivet ID från konsolfönstret med hjälp av cmdleten Disable-PSBreakpoint .
# This command disables the breakpoint with breakpoint ID 0.
Disable-PSBreakpoint -Id 0
Inaktivera alla brytpunkter
Att inaktivera en brytpunkt tar inte bort den. den inaktiverar den tills den är aktiverad. Om du vill inaktivera alla brytpunkter i den aktuella sessionen klickar du på Inaktivera alla brytpunkter på felsökningsmenyn. Följande skript är ett exempel på hur du kan inaktivera alla brytpunkter från konsolfönstret med hjälp av cmdleten Disable-PSBreakpoint .
# This command disables all breakpoints in the current session.
# You can abbreviate this command as: "gbp | dbp".
Get-PSBreakpoint | Disable-PSBreakpoint
Aktivera en brytpunkt
Om du vill aktivera en specifik brytpunkt högerklickar du på raden där du vill aktivera en brytpunkt och klickar sedan på Aktivera brytpunkt. Eller klicka på raden där du vill aktivera en brytpunkt och tryck sedan på F9 eller klicka på Aktivera brytpunkt på felsökningsmenyn. Följande skript är ett exempel på hur du kan aktivera specifika brytpunkter från konsolfönstret med hjälp av cmdleten Enable-PSBreakpoint .
# This command enables breakpoints with breakpoint IDs 0, 1, and 5.
Enable-PSBreakpoint -Id 0, 1, 5
Aktivera alla brytpunkter
Om du vill aktivera alla brytpunkter som definierats i den aktuella sessionen klickar du på Aktivera alla brytpunkter på felsökningsmenyn. Följande skript är ett exempel på hur du kan aktivera alla brytpunkter från konsolfönstret med hjälp av cmdleten Enable-PSBreakpoint .
# This command enables all breakpoints in the current session.
# You can abbreviate the command by using their aliases: "gbp | ebp".
Get-PSBreakpoint | Enable-PSBreakpoint
Hantera en felsökningssession
Innan du börjar felsöka måste du ange en eller flera brytpunkter. Du kan inte ange en brytpunkt om inte skriptet som du vill felsöka sparas. Anvisningar om hur du anger en brytpunkt finns i Hantera brytpunkter eller Set-PSBreakpoint. När du har börjat felsöka kan du inte redigera ett skript förrän du slutar felsöka. Ett skript som har en eller flera brytpunkter sparas automatiskt innan det körs.
Så här börjar du felsöka
Tryck på F5 eller klicka på ikonen Kör skript i verktygsfältet eller klicka på Kör/fortsätt på felsökningsmenyn. Skriptet körs tills det stöter på den första brytpunkten. Den pausar åtgärden där och markerar den rad där den pausades.
Så här fortsätter du att felsöka
Tryck på F5 eller klicka på ikonen Kör skript i verktygsfältet, eller på felsökningsmenyn, klicka på Kör/fortsätt eller skriv C
i konsolfönstret och tryck sedan på RETUR. Detta gör att skriptet fortsätter att köras till nästa brytpunkt eller till slutet av skriptet om inga ytterligare brytpunkter påträffas.
Så här visar du anropsstacken
Anropsstacken visar den aktuella körningsplatsen i skriptet. Om skriptet körs i en funktion som anropades av en annan funktion representeras det i visningen av ytterligare rader i utdata. Längst ned på raden visas det ursprungliga skriptet och raden i den där en funktion anropades. Nästa rad visar den funktionen och raden i den där en annan funktion kan ha anropats. Den översta raden visar den aktuella kontexten för den aktuella rad där brytpunkten har angetts.
Om du vill se den aktuella anropsstacken trycker du på CTRL+SKIFT+D eller klickar på Visa samtalsstack i konsolfönstret på felsökningsmenyn, skriver K
och trycker sedan på RETUR i konsolfönstret.
Så här slutar du felsöka
Tryck på SKIFT+F5 eller klicka på Stoppa felsökning i felsökningsmenyn, eller i konsolfönstret skriver Q
du och trycker sedan på RETUR.
Stega över, stega in och gå ut vid felsökning
Stegning är processen att köra en instruktion i taget. Du kan stoppa på en kodrad och undersöka värdena för variabler och systemets tillstånd. I följande tabell beskrivs vanliga felsökningsuppgifter som att kliva över, kliva in och kliva ut.
Felsökningsaktivitet | beskrivning | Så här gör du det i PowerShell ISE |
---|---|---|
Stega in | Kör den aktuella instruktionen och stoppar sedan vid nästa instruktion. Om den aktuella instruktionen är ett funktions- eller skriptanrop går felsökningsprogrammet in i den funktionen eller skriptet, annars stoppas den vid nästa instruktion. | Tryck på F11 eller klicka på Steg till på felsökningsmenyn, eller i konsolfönstret skriver S du och trycker på RETUR. |
Steg över | Kör den aktuella instruktionen och stoppar sedan vid nästa instruktion. Om den aktuella instruktionen är ett funktions- eller skriptanrop kör felsökningsprogrammet hela funktionen eller skriptet och stoppas vid nästa instruktion efter funktionsanropet. | Tryck på F10 eller klicka på Steg över i konsolfönstret på felsökningsmenyn, skriv V och tryck på RETUR. |
Steg ut | Steg ut ur den aktuella funktionen och upp en nivå om funktionen är kapslad. Om skriptet finns i huvudtexten körs det till slutet eller till nästa brytpunkt. De överhoppade uttrycken körs, men går inte igenom. | Tryck på SKIFT+F11 eller på felsökningsmenyn, klicka på Steg ut eller i konsolfönstret, skriv O och tryck på RETUR. |
Fortsätta | Fortsätter körningen till slutet eller till nästa brytpunkt. De överhoppade funktionerna och anropen körs, men går inte igenom. | Tryck på F5 eller klicka på Kör/fortsätt på felsökningsmenyn, eller i konsolfönstret skriver C du och trycker på RETUR. |
Så här visar du värdena för variabler vid felsökning
Du kan visa aktuella värden för variabler i skriptet när du går igenom koden.
Så här visar du värdena för standardvariabler
Använd en av följande metoder:
Hovra över variabeln i skriptfönstret för att visa dess värde som ett verktygstips.
I konsolfönstret skriver du variabelnamnet och trycker på RETUR.
Alla fönster i ISE finns alltid i samma omfång. När du felsöker ett skript körs därför de kommandon som du skriver i konsolfönstret i skriptomfånget. På så sätt kan du använda konsolfönstret för att hitta värdena för variabler och anropsfunktioner som endast definieras i skriptet.
Så här visar du värdena för automatiska variabler
Du kan använda föregående metod för att visa värdet för nästan alla variabler när du felsöker ett skript. Dessa metoder fungerar dock inte för följande automatiska variabler.
$_
$Input
$MyInvocation
$PSBoundParameters
$Args
Om du försöker visa värdet för någon av dessa variabler får du värdet för variabeln för i en intern pipeline som felsökaren använder, inte värdet för variabeln i skriptet. Du kan kringgå detta för några variabler ($_
, , $Input
$MyInvocation
, $PSBoundParameters
och $Args
) med hjälp av följande metod:
I skriptet tilldelar du värdet för den automatiska variabeln till en ny variabel.
Visa värdet för den nya variabeln, antingen genom att hovra över den nya variabeln i skriptfönstret eller genom att skriva den nya variabeln i konsolfönstret.
Om du till exempel vill visa variabelns $MyInvocation
värde i skriptet tilldelar du värdet till en ny variabel, till exempel $scriptName
, och hovra sedan över eller skriv variabeln $scriptName
för att visa dess värde.
# In C:\ps-test\MyScript.ps1
$scriptName = $MyInvocation.PSCommandPath
# In the Console Pane:
.\MyScript.ps1
$scriptName
C:\ps-test\MyScript.ps1