Debuggen von Skripten
Skripte, die innerhalb von Universal ausgeführt werden, laufen in Hintergrundprozessen oder Runspaces, was es schwierig machen kann, zu debuggen, was innerhalb eines Skripts geschieht. Sie können Cmdlets wie Write-Debug und Write-Verbose verwenden, um mehr Informationen in den Protokollen für Apps und Jobs bereitzustellen.
Visual Studio Remote Debugger
Mit der PowerShell Universal Visual Studio Code-Erweiterung können Sie sich direkt mit Ihren PowerShell-Skripten verbinden, die PowerShell Universal ausführen.
Integrierter Debugger
Der integrierte Debugger wird in PowerShell 7 und integrierten Umgebungen unterstützt. Er wird in Windows PowerShell nicht unterstützt.
Der integrierte Debugger ermöglicht den Zugriff auf eine Debug-Konsole für laufende Skripte. Sie können den Aufruf des Cmdlets Wait-Debugger in Ihre Skripte einbinden, und sie wechseln in den Zustand In Breakpoint. Sobald dies geschieht, können Sie den Job anzeigen, um Befehle gegen das Skript auszuführen.
Skripte
PowerShell Universal integriert sich direkt in den PowerShell-Debugger. Sie können Wait-Debugger in Ihre Skripte einbinden, um sie anzuhalten.
Nehmen wir zum Beispiel an, Sie haben ein Skript mit einem enthaltenen Wait-Debugger-Aufruf. Die erste Zeile wird ausgeführt und dann hält es an, sobald es die zweite Zeile erreicht.
$Processes = Get-Process
Wait-DebuggerSobald ein Skript angehalten ist, sehen Sie ein Terminal zum Debuggen des Skripts.

Sie können dann die integrierten Debugging-Befehle verwenden, um durch das Skript zu schrittweise durchzugehen.

Apps
Sie können Wait-Debugger direkt in Ihren PowerShell Universal-Apps verwenden. Sie können diesen Befehl in Event-Handler und Dynamics einbinden, um die App-Ausführung anzuhalten und den aktuellen Zustand des Skripts auszuwerten.
Sie können Wait-Debugger zum Beispiel in ein Dynamic einbinden.
Das Ergebnis ist, dass die App das Lade-Skeleton anzeigt, weil der PowerShell-Debugger sich in einem Breakpoint befindet.

Innerhalb der Admin-Konsole können Sie auf die Registerkarte Debugger klicken, um die aktuellen Breakpoints anzuzeigen, auf die die App wartet. Der Debugger stellt ein Terminal zur Auswertung von Befehlen gegen den Runspace bereit. Sie können jeden Standard-PowerShell-Befehl verwenden. Sie können auch die Debugging-Werkzeuge wie Stepping und die Auflistung des Quellcodes verwenden. Am oberen Rand der Konsole sind Schaltflächen verfügbar.
Sie können Befehle wie Get-Variable verwenden, um Informationen über den Variablenzustand zu erhalten. Führen Sie c aus, damit der Endpunkt die Ausführung fortsetzen kann.
Protokollierung von Skripten
Bestimmte Aspekte von Universal protokollieren ihre Skripte automatisch. Andere Funktionen erfordern möglicherweise, dass Sie selbst protokollieren.
APIs
Sie können die Live-Log-Ansicht auf der Registerkarte Log verwenden, um Protokolle für die ausgewählte API anzuzeigen.
Jobs
Jobs protokollieren umfangreich. Sie sehen Konsolen- und Pipeline-Ausgaben. Wenn Sie $DebugPreference oder $VerbosePreference setzen, sehen Sie diese Streams ebenfalls in der Konsolenausgabe. Sie können zusätzliche Protokollmeldungen mit Write-Debug oder Write-Verbose hinzufügen.
Apps
Apps protokollieren informative Meldungen, Warnungen und Fehlermeldungen in ihrem Protokoll. Es wird empfohlen, beim Starten einer App die Protokollierung zu verwenden, anstatt zu versuchen, einen Debugger anzuhängen. Sie können auch die Variable $DebugPreference verwenden, um während des App-Starts zusätzliche Informationen zu erhalten.
Authentifizierung und Autorisierung
Sie können die Live-Log-Ansicht auf den Authentifizierungs- und Rollenseiten verwenden, um die PowerShell-Stream-Ausgabe zu sehen.
Debuggen von Skripten über eine PowerShell-Konsole
Sie können jedes Skript innerhalb von Universal (oder eigentlich jeden PowerShell-Prozess) mit den in PowerShell verfügbaren Debugging-Cmdlets debuggen. Diese Cmdlets ermöglichen es Ihnen, sich mit lokalen PowerShell-Prozessen wie Universal zu verbinden und direkt im Terminal durch Ihre Skripte zu gehen.
Anhalten des Skripts
Zuerst müssen Sie sicherstellen, dass das Skript darauf wartet, dass Sie den Debugger verbinden, bevor es fortfährt. Das bedeutet, dass Sie irgendwo in Ihrem Skript einen Wait-Debugger-Befehl einbinden müssen.
Ausführen Ihres Skripts
Nachdem Sie Ihr Skript so eingerichtet haben, dass es anhält und auf den Debugger wartet, möchten Sie Ihr Skript ausführen. Bei Jobs starten Sie einfach den Job. Bei APIs müssen Sie eine Anfrage an die API über den Endpunkt senden, den Sie testen möchten. Bei Apps möchten Sie die Seite in Ihrem Browser laden. Bei Authentifizierung und Autorisierung möchten Sie sich anmelden.
Ermitteln Ihrer Prozess-ID
Sobald Sie Ihren Wait-Debugger-Befehl in dem Skript haben, das Sie debuggen möchten, müssen Sie das Skript starten und den Prozess bestimmen, in dem es ausgeführt wird.
Jobs
Jobs laufen in ihrem eigenen isolierten Prozess innerhalb von Universal. Sie müssen lediglich den Job starten, und er startet den Prozess und wartet auf Ihren Wait-Debugger-Befehl. Sobald Ihr Job gestartet ist, können Sie das Cmdlet Get-UAJob verwenden, um die Prozess-ID dieses Jobs zu finden.
APIs
APIs laufen in einem einzelnen PowerShell-Prozess. Es wird nicht für jeden API-Aufruf ein neuer Prozess gestartet. Sie können den API-Prozess finden, indem Sie den pwsh- oder PowerShell-Prozess mit der Befehlszeile suchen, die StartApi enthält.
Apps
Apps laufen in ihrem eigenen isolierten PowerShell-Prozess. Die Prozess-ID ist in der App-Tabelle innerhalb der Admin-Konsole aufgeführt.
Authentifizierung und Autorisierung
Authentifizierungs- und Autorisierungsskripte laufen innerhalb des Universal-Servers. Sie können den Prozess Universal.Server.exe finden und sich an diesen anhängen.
Integrierte Umgebung
Jede Funktion, die innerhalb der integrierten Umgebung ausgeführt wird, läuft innerhalb des Prozesses Universal.Server.exe. Sie müssen sich an diesen Prozess anhängen, um sie zu debuggen.
Anhängen an den Prozess und Debuggen des Runspace
Sobald Sie den Prozess haben, an den Sie sich anhängen möchten, können Sie dies mit Enter-PSHostProcess tun. Geben Sie einfach die Prozess-ID an, die Sie im vorherigen Schritt gefunden haben.
Sobald Sie sich an den Prozess angehängt haben, möchten Sie nun den Runspace finden, in dem Ihr Code ausgeführt wird. Dazu können Sie das Cmdlet Get-Runspace verwenden. Dieses gibt eine Liste der derzeit in Ihrem Prozess aktiven Runspaces zurück. Suchen Sie nach dem Runspace, der mit InBreakpoint markiert ist. Dies ist der Runspace, der auf den Wait-Debugger-Befehl wartet.
Nachdem Sie nun Ihren Runspace gefunden haben, verwenden Sie Debug-Runspace, um sich an den Runspace anzuhängen. Sie haben nun die Möglichkeit, Debugging-Befehle gegen diesen Runspace auszuführen. Sie können den Status von Variablen anzeigen, Befehle ausführen und sogar schrittweise durch das Skript gehen.
Eine vollständige Liste der Debugging-Befehle finden Sie in der Microsoft-Dokumentation hier.
Beispiel für das Verbinden mit einem API-Prozess
Im Folgenden finden Sie ein Beispiel, wie Sie sich mit einem API-Prozess verbinden.
Debuggen mit Visual Studio Code
Um ein Skript zu debuggen, können Sie das Cmdlet Wait-Debugger in Ihrem Skript verwenden, um das Skript anzuhalten, bis ein Debugger angehängt ist. Sie können dann einen Debugger wie VS Code verwenden, um sich an den Prozess und den Runspace anzuhängen, um Variablen anzuzeigen, schrittweise durch den Code zu gehen und Debugging-Befehle auszuführen.
Sie können Skripte auch mit den integrierten Cmdlets Enter-PSHostProcess, Get-Runspace und Debug-Runspace debuggen.
Zuletzt aktualisiert
War das hilfreich?