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 consolevenster om de status van uw script te onderzoeken. U kunt variabelen uitvoeren of andere opdrachten uitvoeren. U kunt zelfs de waarde wijzigen van 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
Variabel 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 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.
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 scripts.
Een onderbrekingspunt instellen
Een onderbrekingspunt kan alleen worden ingesteld in een script nadat het is opgeslagen. Klik met de rechtermuisknop op de regel waar u een regeleindepunt wilt instellen en klik vervolgens op Onderbrekingspunt in-/uitschakelen. Of klik op de lijn waar u een regeleindepunt 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 voor lijsten. 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 het later opnieuw wilt gebruiken, kunt u overwegen om in plaats daarvan een onderbrekingspunt uit te schakelen. 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 het niet verwijderd. De functie wordt uitgeschakeld totdat deze is ingeschakeld. Als u een specifiek onderbrekingspunt voor een regel 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; de functie 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 vanuit het consoledeelvenster kunt uitschakelen 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 vervolgens 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 foutopsporing start, moet u een of meer onderbrekingspunten instellen. U kunt geen onderbrekingspunt instellen, tenzij het script dat u wilt opsporen, wordt opgeslagen. Zie Onderbrekingspunten of Set-PSBreakpoint beheren voor instructies voor het instellen van een onderbrekingspunt. Nadat u de foutopsporing hebt gestart, kunt u een script pas bewerken als u de foutopsporing stopt. 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 optreedt. De bewerking wordt daar onderbroken en de lijn waarop deze is onderbroken gemarkeerd.
Foutopsporing voortzetten
Druk op F5 of klik op de werkbalk op het pictogram Script uitvoeren of klik in het menu Foutopsporing op Uitvoeren/doorgaan of typ C
in het consolevenster en druk vervolgens op Enter. Dit zorgt ervoor dat het script wordt uitgevoerd naar het volgende onderbrekingspunt of het einde van het script als er geen onderbrekingspunten meer worden aangetroffen.
De aanroepstack weergeven
In de aanroepstack wordt de huidige uitvoeringslocatie in het script weergegeven. 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 hierin weergegeven waarin een functie is aangeroepen. In de volgende regel ziet u die functie en de lijn erin 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 oproepstack wilt zien, drukt u op Ctrl+Shift+D of klikt u in het menu Foutopsporing op Gespreksstack weergeven of typt u in het consolevenster 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 consolevenster en druk op Enter.
Stapsgewijs doorlopen, instappen en uitstappen tijdens foutopsporing
Stapstappen is het uitvoeren van één instructie tegelijk. U kunt stoppen op een coderegel en de waarden van variabelen en de status van het systeem onderzoeken. In de volgende tabel worden veelvoorkomende foutopsporingstaken beschreven, zoals overstappen, instappen en uitstappen.
Foutopsporingstaak | Beschrijving | 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, stapt het foutopsporingsprogramma in die functie of het script, 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 consolevensterS . |
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 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 consolevensterV . |
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 doorlopen. | Druk op Shift+F11 of klik in het menu Foutopsporing op Stap uit of typ en druk op Enter in het consolevenster.O |
Doorgaan | Hiermee wordt de uitvoering voortgezet naar 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 C en druk op Enter in het consolevenster. |
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. Tijdens het opsporen van fouten in een script worden de opdrachten die u in het consolevenster typt daarom 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 enkele variabelen ($_
, $Input
, $MyInvocation
, $PSBoundParameters
en $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 plaatst u de muisaanwijzer op de variabele of typt u de variabele om de $scriptName
waarde ervan weer te geven.
# In C:\ps-test\MyScript.ps1
$scriptName = $MyInvocation.PSCommandPath
# In the Console Pane:
.\MyScript.ps1
$scriptName
C:\ps-test\MyScript.ps1