Fouten opsporen in scripts in Windows PowerShell ISE
In dit artikel wordt beschreven hoe u fouten in scripts op een lokale computer opspoort met behulp van de visuele foutopsporingsfuncties van Windows PowerShell Integrated Scripting Environment (ISE).
Onderbrekingspunten beheren
Een onderbrekingspunt is een aangewezen plek in een script waarin u de bewerking wilt onderbreken, zodat u de huidige status van de variabelen en de omgeving waarin uw script wordt uitgevoerd, kunt onderzoeken. Zodra uw script is onderbroken door een onderbrekingspunt, kunt u opdrachten uitvoeren in het consoledeelvenster om de status van uw script te onderzoeken. U kunt variabelen uitvoeren of andere opdrachten uitvoeren. U kunt zelfs de waarde wijzigen van alle variabelen die zichtbaar zijn voor de context van het script dat momenteel wordt uitgevoerd. Nadat u hebt onderzocht wat u wilt zien, kunt u de bewerking van het script hervatten.
U kunt drie typen onderbrekingspunten instellen in de Windows PowerShell foutopsporingsomgeving:
Regeleindepunt. Het script wordt onderbroken wanneer de aangewezen regel wordt bereikt tijdens de bewerking van het script
Variabele onderbrekingspunt. Het script wordt onderbroken wanneer de waarde van de aangewezen variabele verandert.
Onderbrekingspunt van opdracht. Het script wordt onderbroken wanneer de aangewezen opdracht op het punt staat om te worden uitgevoerd tijdens de bewerking van het script. Het kan parameters bevatten om het onderbrekingspunt verder te filteren op alleen de gewenste bewerking. De opdracht kan ook een functie zijn die u hebt gemaakt.
Van deze, in de Windows PowerShell ISE-foutopsporingsomgeving, kunnen alleen regelonderbrekingspunten worden ingesteld met behulp van het menu of de sneltoetsen. De andere twee typen onderbrekingspunten kunnen worden ingesteld, maar ze worden ingesteld vanuit het consoledeelvenster met behulp van de cmdlet Set-PSBreakpoint . In deze sectie wordt beschreven hoe u foutopsporingstaken in Windows PowerShell ISE kunt uitvoeren met behulp van de menu's waar beschikbaar en een breder scala aan opdrachten kunt uitvoeren vanuit het consoledeelvenster met behulp van scripting.
Een onderbrekingspunt instellen
Een onderbrekingspunt kan alleen in een script worden ingesteld nadat het is opgeslagen. Klik met de rechtermuisknop op de lijn waar u een regeleinde wilt instellen en klik vervolgens op Onderbrekingspunt in-/uitschakelen. Of klik op de lijn waar u een regeleinde wilt instellen en druk op F9 of klik in het menu Foutopsporing op Onderbrekingspunt in-/uitschakelen.
Het volgende script is een voorbeeld van hoe u een variabele onderbrekingspunt kunt instellen vanuit het consoledeelvenster met behulp van de cmdlet Set-PSBreakpoint .
# This command sets a breakpoint on the Server variable in the Sample.ps1 script.
Set-PSBreakpoint -Script sample.ps1 -Variable Server
Alle onderbrekingspunten weergeven
Geeft alle onderbrekingspunten weer in de huidige Windows PowerShell sessie.
Klik in het menu Foutopsporing op Onderbrekingspunten weergeven. Het volgende script is een voorbeeld van hoe u alle onderbrekingspunten in het consoledeelvenster kunt weergeven met behulp van de Get-PSBreakpoint-cmdlet .
# This command lists all breakpoints in the current session.
Get-PSBreakpoint
Een onderbrekingspunt verwijderen
Als u een onderbrekingspunt verwijdert, wordt het verwijderd.
Als u denkt dat u deze later opnieuw wilt gebruiken, kunt u in plaats daarvan een onderbrekingspunt uitschakelen . Klik met de rechtermuisknop op de regel waar u een onderbrekingspunt wilt verwijderen en klik vervolgens op ToggleBreakpoint. Of klik op de regel waar u een onderbrekingspunt wilt verwijderen en klik in het menu Foutopsporing op Onderbrekingspunt in-/uitschakelen. Het volgende script is een voorbeeld van het verwijderen van een onderbrekingspunt met een opgegeven id uit het consoledeelvenster met behulp van de cmdlet Remove-PSBreakpoint .
# This command deletes the breakpoint with breakpoint ID 2.
Remove-PSBreakpoint -Id 2
Alle onderbrekingspunten verwijderen
Als u alle onderbrekingspunten wilt verwijderen die zijn gedefinieerd in de huidige sessie, klikt u in het menu Foutopsporing op Alle onderbrekingspunten verwijderen.
Het volgende script is een voorbeeld van het verwijderen van alle onderbrekingspunten uit het consoledeelvenster met behulp van de cmdlet Remove-PSBreakpoint .
# This command deletes all of the breakpoints in the current session.
Get-PSBreakpoint | Remove-PSBreakpoint
Een onderbrekingspunt uitschakelen
Als u een onderbrekingspunt uitschakelt, wordt dit niet verwijderd. Het wordt uitgeschakeld totdat deze is ingeschakeld. Als u een specifiek regeleinde wilt uitschakelen, klikt u met de rechtermuisknop op de regel waar u een onderbrekingspunt wilt uitschakelen en klikt u vervolgens op Onderbrekingspunt uitschakelen.
Of klik op de regel waar u een onderbrekingspunt wilt uitschakelen en druk op F9 of klik in het menu Foutopsporing op Onderbrekingspunt uitschakelen. Het volgende script is een voorbeeld van hoe u een onderbrekingspunt met een opgegeven id uit het consoledeelvenster kunt verwijderen met behulp van de cmdlet Disable-PSBreakpoint .
# This command disables the breakpoint with breakpoint ID 0.
Disable-PSBreakpoint -Id 0
Alle onderbrekingspunten uitschakelen
Als u een onderbrekingspunt uitschakelt, wordt het niet verwijderd; het wordt uitgeschakeld totdat deze is ingeschakeld. Als u alle onderbrekingspunten in de huidige sessie wilt uitschakelen, klikt u in het menu Foutopsporing op Alle onderbrekingspunten uitschakelen. Het volgende script is een voorbeeld van hoe u alle onderbrekingspunten kunt uitschakelen vanuit het consoledeelvenster met behulp van de cmdlet Disable-PSBreakpoint .
# This command disables all breakpoints in the current session.
# You can abbreviate this command as: "gbp | dbp".
Get-PSBreakpoint | Disable-PSBreakpoint
Een onderbrekingspunt inschakelen
Als u een specifiek onderbrekingspunt wilt inschakelen, klikt u met de rechtermuisknop op de regel waar u een onderbrekingspunt wilt inschakelen en klikt u op Onderbrekingspunt inschakelen. Of klik op de regel waar u een onderbrekingspunt wilt inschakelen en druk op F9 of klik in het menu Foutopsporing op Onderbrekingspunt inschakelen. Het volgende script is een voorbeeld van hoe u specifieke onderbrekingspunten kunt inschakelen vanuit het consoledeelvenster met behulp van de cmdlet Enable-PSBreakpoint .
# This command enables breakpoints with breakpoint IDs 0, 1, and 5.
Enable-PSBreakpoint -Id 0, 1, 5
Alle onderbrekingspunten inschakelen
Als u alle onderbrekingspunten wilt inschakelen die zijn gedefinieerd in de huidige sessie, klikt u in het menu Foutopsporing op Alle onderbrekingspunten inschakelen. Het volgende script is een voorbeeld van hoe u alle onderbrekingspunten vanuit het consoledeelvenster kunt inschakelen met behulp van de cmdlet 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
Een foutopsporingssessie beheren
Voordat u begint met foutopsporing, moet u een of meer onderbrekingspunten instellen. U kunt geen onderbrekingspunt instellen, tenzij het script dat u wilt opsporen, wordt opgeslagen. Zie Onderbrekingspunten ofSet-PSBreakpoint beheren voor instructies over het instellen van een onderbrekingspunt. Nadat u de foutopsporing hebt gestart, kunt u een script pas bewerken als u stopt met foutopsporing. Een script met een of meer onderbrekingspuntenset wordt automatisch opgeslagen voordat het wordt uitgevoerd.
Foutopsporing starten
Druk op F5 of klik op de werkbalk op het pictogram Script uitvoeren of klik in het menu Foutopsporing op Uitvoeren/Doorgaan. Het script wordt uitgevoerd totdat het eerste onderbrekingspunt tegenkomt. De bewerking wordt daar onderbroken en de lijn waarop deze is onderbroken gemarkeerd.
Doorgaan met foutopsporing
Druk op F5 of klik op de werkbalk op het pictogram Script uitvoeren of klik in het menu Foutopsporing op Uitvoeren/doorgaan of typ in het consoledeelvenster C en druk op Enter. Dit zorgt ervoor dat het script wordt voortgezet naar het volgende onderbrekingspunt of tot het einde van het script als er geen verdere onderbrekingspunten worden aangetroffen.
De aanroepstack weergeven
De aanroepstack geeft de huidige uitvoeringslocatie in het script weer. Als het script wordt uitgevoerd in een functie die is aangeroepen door een andere functie, wordt dat weergegeven in de weergave door extra rijen in de uitvoer. In de onderste rij wordt het oorspronkelijke script en de regel weergegeven waarin een functie is aangeroepen. In de volgende regel wordt die functie en de lijn hierin weergegeven waarin mogelijk een andere functie is aangeroepen. De bovenste rij toont de huidige context van de huidige regel waarop het onderbrekingspunt is ingesteld.
Als u de huidige aanroepstack wilt zien, drukt u op Ctrl+Shift+D of klikt u in het menu Foutopsporing op Gespreksstack weergeven of typt u in het consoledeelvenster K en drukt u op Enter.
Foutopsporing stoppen
Druk op Shift+F5 of klik in het menu Foutopsporing op Foutopsporing stoppen of typ Q in het consoledeelvenster en druk op Enter.
Stap over, stap in en stap uit tijdens foutopsporing
Stapstappen is het uitvoeren van één instructie tegelijk. U kunt stoppen met een regel code en de waarden van variabelen en de status van het systeem onderzoeken. In de volgende tabel worden veelvoorkomende foutopsporingstaken beschreven, zoals stapsgewijs stappen, in- en uitstappen.
| Foutopsporingstaak | Description | Hoe u dit kunt doen in PowerShell ISE |
|---|---|---|
| Stap in | Voert de huidige instructie uit en stopt vervolgens bij de volgende instructie. Als de huidige instructie een functie- of scriptaanroep is, wordt het foutopsporingsprogramma in die functie of dat script uitgevoerd, anders stopt deze bij de volgende instructie. | Druk op F11 of klik in het menu Foutopsporing op Stap in of typ en druk op Enter in het consoledeelvensterS. |
| Stap over | Voert de huidige instructie uit en stopt vervolgens bij de volgende instructie. Als de huidige instructie een functie- of scriptaanroep is, voert het foutopsporingsprogramma de hele functie of het hele script uit en stopt deze bij de volgende instructie na de functieaanroep. | Druk op F10 of klik in het menu Foutopsporing op Stap over of typ en druk op Enter in het consoledeelvensterV. |
| Stap uit | Stappen uit de huidige functie en één niveau omhoog als de functie is genest. Als het script in de hoofdtekst wordt uitgevoerd naar het einde of naar het volgende onderbrekingspunt. De overgeslagen instructies worden uitgevoerd, maar niet getrapt. | Druk op Shift+F11 of klik in het menu Foutopsporing op Stap uit of typ en druk in het consoledeelvenster O op Enter. |
| Doorgaan | Gaat verder met de uitvoering tot het einde of naar het volgende onderbrekingspunt. De overgeslagen functies en aanroepen worden uitgevoerd, maar niet getrapt. | Druk op F5 of klik in het menu Foutopsporing op Uitvoeren/Doorgaan of typ en druk op Enter in het consoledeelvensterC. |
De waarden van variabelen weergeven tijdens foutopsporing
U kunt de huidige waarden van variabelen in het script weergeven terwijl u de code doorloopt.
De waarden van standaardvariabelen weergeven
Hanteer één van de volgende methoden:
Beweeg in het scriptvenster de muisaanwijzer over de variabele om de waarde ervan weer te geven als knopinfo.
Typ in het consoledeelvenster de naam van de variabele en druk op Enter.
Alle deelvensters in ISE bevinden zich altijd in hetzelfde bereik. Dus terwijl u fouten in een script opspoort, worden de opdrachten die u typt in het consoledeelvenster uitgevoerd in het scriptbereik. Hiermee kunt u het consoledeelvenster gebruiken om de waarden van variabelen te vinden en functies aan te roepen die alleen in het script zijn gedefinieerd.
De waarden van automatische variabelen weergeven
U kunt de voorgaande methode gebruiken om de waarde van bijna alle variabelen weer te geven terwijl u fouten in een script opspoort. Deze methoden werken echter niet voor de volgende automatische variabelen.
$_$Input$MyInvocation$PSBoundParameters$Args
Als u de waarde van een van deze variabelen probeert weer te geven, krijgt u de waarde van die variabele in een interne pijplijn waarvoor het foutopsporingsprogramma gebruikmaakt, niet de waarde van de variabele in het script. U kunt dit omzeilen voor een paar variabelen ($_, $MyInvocation$Input, , $PSBoundParametersen $Args) met behulp van de volgende methode:
Wijs in het script de waarde van de automatische variabele toe aan een nieuwe variabele.
Geef de waarde van de nieuwe variabele weer door de muisaanwijzer op de nieuwe variabele in het scriptvenster te plaatsen of door de nieuwe variabele in het consoledeelvenster te typen.
Als u bijvoorbeeld de waarde van de $MyInvocation variabele wilt weergeven, wijst u in het script de waarde toe aan een nieuwe variabele, zoals $scriptName, en beweegt u de muisaanwijzer over of typt u de variabele om de $scriptName waarde ervan weer te geven.
# In C:\ps-test\MyScript.ps1
$scriptName = $MyInvocation.MyCommand.Path
# In the Console Pane:
.\MyScript.ps1
$scriptName
C:\ps-test\MyScript.ps1