Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit Azure Functions können Sie Ihre Funktionen als PowerShell-Skripts entwickeln.
Sie können Ihre PowerShell-Funktionen lokal wie alle PowerShell-Skripts mithilfe der folgenden Standardentwicklungstools debuggen:
- Visual Studio Code: Der kostenlose, einfache und open-Source-Text-Editor von Microsoft mit der PowerShell-Erweiterung, die eine vollständige PowerShell-Entwicklungsumgebung bietet.
- Eine PowerShell-Konsole: Debuggen Sie mit denselben Befehlen, die Sie zum Debuggen anderer PowerShell-Prozesse verwenden würden.
Azure Functions Core Tools unterstützt das lokale Debuggen von Azure-Funktionen, einschließlich PowerShell-Funktionen.
Beispielfunktions-App
Die in diesem Artikel verwendete Funktions-App verfügt über eine einzelne ausgelöste HTTP-Funktion und verfügt über die folgenden Dateien:
PSFunctionApp
| - HttpTriggerFunction
| | - run.ps1
| | - function.json
| - local.settings.json
| - host.json
| - profile.ps1
Diese Funktions-App ähnelt der, die Sie erhalten, wenn Sie die PowerShell-Schnellstartanleitung abschließen.
Der Funktionscode in run.ps1 sieht wie das folgende Skript aus:
param($Request)
$name = $Request.Query.Name
if($name) {
$status = 200
$body = "Hello $name"
}
else {
$status = 400
$body = "Please pass a name on the query string or in the request body."
}
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = $status
Body = $body
})
Anfügepunkt festlegen
Zum Debuggen einer beliebigen PowerShell-Funktion muss die Funktion angehalten werden, damit der Debugger angefügt wird. Das Wait-Debugger Cmdlet beendet die Ausführung und wartet auf den Debugger.
Hinweis
Bei Verwendung von PowerShell 7 müssen Sie den Wait-Debugger Aufruf nicht in Ihrem Code hinzufügen.
Alles, was Sie tun müssen, ist, einen Aufruf des Wait-Debugger-Cmdlets direkt oberhalb der if-Anweisung einzufügen, wie folgt:
param($Request)
$name = $Request.Query.Name
# This is where we will wait for the debugger to attach
Wait-Debugger
if($name) {
$status = 200
$body = "Hello $name"
}
# ...
Das Debuggen beginnt mit der if Anweisung.
Mit Wait-Debugger an Ort und Stelle können Sie jetzt die Funktionen mithilfe von Visual Studio Code oder einer PowerShell-Konsole debuggen.
Debuggen in Visual Studio Code
Um Ihre PowerShell-Funktionen in Visual Studio Code zu debuggen, müssen Sie folgendes installiert haben:
- PowerShell-Erweiterung für Visual Studio Code
- Azure Functions-Erweiterung für Visual Studio Code
- PowerShell Core 6.2 oder höher
Laden Sie nach der Installation dieser Abhängigkeiten ein vorhandenes PowerShell-Funktionen-Projekt, oder erstellen Sie Ihr erstes PowerShell-Funktionen-Projekt.
Hinweis
Wenn Ihr Projekt nicht über die erforderlichen Konfigurationsdateien verfügt, werden Sie aufgefordert, sie hinzuzufügen.
Festlegen der PowerShell-Version
PowerShell Core wird parallel mit Windows PowerShell installiert. Legen Sie PowerShell Core als PowerShell-Version fest, die mit der PowerShell-Erweiterung für Visual Studio Code verwendet werden soll.
Drücken Sie F1, um die Befehlspalette anzuzeigen, und suchen Sie dann nach
Session.Wählen Sie PowerShell aus: Sitzungsmenü anzeigen.
Wenn Ihre aktuelle Sitzung nicht PowerShell Core 6 ist, wählen Sie Zu PowerShell Core 6 wechseln.
Wenn eine PowerShell-Datei geöffnet ist, wird die version grün unten rechts im Fenster angezeigt. Wenn Sie diesen Text auswählen, wird auch das Sitzungsmenü angezeigt. Weitere Informationen finden Sie in der Auswahl einer PowerShell-Version, die mit der Erweiterung verwendet werden soll.
Starten der Funktions-App
Stellen Sie sicher, dass Wait-Debugger in der Funktion gesetzt ist, an der Sie den Debugger anfügen möchten. Mit Wait-Debugger können Sie Ihre Funktions-App mit Visual Studio Code debuggen.
Wählen Sie den Debugbereich aus, und fügen Sie dann die PowerShell-Funktion an.
Sie können auch F5 drücken, um mit dem Debuggen zu beginnen.
Der Startdebuggingvorgang führt die folgenden Aufgaben aus:
- Führen Sie
func extensions installim Terminal aus, um alle Azure Functions-Erweiterungen zu installieren, die von Ihrer Funktions-App benötigt werden. - Führen Sie
func host startim Terminal aus, um die Funktions-App im Functions-Host zu starten. - Fügen Sie den PowerShell-Debugger an den PowerShell-Runspace innerhalb der Functions-Laufzeitumgebung an.
Hinweis
Sie müssen sicherstellen, dass PSWorkerInProcConcurrencyUpperBound auf 1 festgelegt ist, um die korrekte Debugerfahrung in Visual Studio Code sicherzustellen. Dies ist die Standardeinstellung.
Wenn Ihre Funktions-App ausgeführt wird, benötigen Sie eine separate PowerShell-Konsole, um die ausgelöste HTTP-Funktion aufzurufen.
In diesem Fall ist die PowerShell-Konsole der Client. Die Invoke-RestMethod Funktion wird verwendet, um die Funktion auszulösen.
Führen Sie in einer PowerShell-Konsole den folgenden Befehl aus:
Invoke-RestMethod "http://localhost:7071/api/HttpTrigger?Name=Functions"
Sie werden feststellen, dass eine Antwort nicht sofort zurückgegeben wird. Der Grund dafür ist, dass Wait-Debugger den Debugger angefügt hat und dass die PowerShell-Ausführung in den Unterbrechungsmodus (break) gewechselt ist, sobald sie konnte. Dies liegt an dem Konzept breakAll, das später erläutert wird. Nachdem Sie die Schaltfläche continue gedrückt haben, unterbricht der Debugger in der Zeile direkt hinter Wait-Debugger.
An diesem Punkt ist der Debugger angefügt, und Sie können alle normalen Debuggervorgänge ausführen. Weitere Informationen zur Verwendung des Debuggers in Visual Studio Code finden Sie in der offiziellen Dokumentation.
Nachdem Sie das Skript fortgesetzt und vollständig aufgerufen haben, werden Sie feststellen, dass:
- Die PowerShell-Konsole, die
Invoke-RestMethodausgeführt hat, hat ein Ergebnis zurückgegeben. - Die integrierte PowerShell-Konsole in Visual Studio Code wartet auf die Ausführung eines Skripts.
Bei nachfolgenden Aufrufen derselben Funktion unterbricht der Debugger in der PowerShell-Erweiterung direkt nach Wait-Debugger.
Debuggen in einer PowerShell-Konsole
Hinweis
In diesem Abschnitt wird davon ausgegangen, dass Sie die Dokumentation zu Azure Functions Core Tools gelesen haben und wissen, wie Sie den func host start Befehl zum Starten Ihrer Funktions-App verwenden.
Öffnen Sie eine Konsole, wechseln Sie mittels cd in das Verzeichnis Ihrer Funktions-App, und führen Sie den folgenden Befehl aus:
func host start
Mit der in Ausführung befindlichen Funktions-App und bei eingefügtem Wait-Debugger können Sie an den Prozess anfügen. Sie benötigen zwei weitere PowerShell-Konsolen.
Eine der Konsolen fungiert als Client. Sie rufen Invoke-RestMethod auf, um die Funktion auszulösen. Sie können beispielsweise den folgenden Befehl ausführen:
Invoke-RestMethod "http://localhost:7071/api/HttpTrigger?Name=Functions"
Sie werden feststellen, dass es keine Antwort liefert, was auf Wait-Debugger zurückzuführen ist. Der PowerShell-Runspace wartet nun darauf, dass ein Debugger angefügt wird. Fügen wir ihn also an.
Führen Sie in der anderen PowerShell-Konsole den folgenden Befehl aus:
Get-PSHostProcessInfo
Dieses Cmdlet gibt eine Tabelle zurück, die wie die folgende Ausgabe aussieht:
ProcessName ProcessId AppDomainName
----------- --------- -------------
dotnet 49988 None
pwsh 43796 None
pwsh 49970 None
pwsh 3533 None
pwsh 79544 None
pwsh 34881 None
pwsh 32071 None
pwsh 88785 None
Notieren Sie sich die ProcessId für das Element in der Tabelle mit dem ProcessName als dotnet. Dieser Prozess ist Ihre Funktions-App.
Führen Sie als Nächstes den folgenden Codeausschnitt aus:
# This enters into the Azure Functions PowerShell process.
# Put your value of `ProcessId` here.
Enter-PSHostProcess -Id $ProcessId
# This triggers the debugger.
Debug-Runspace 1
Nach dem Starten unterbricht der Debugger und zeigt ungefähr die folgende Ausgabe an:
Debugging Runspace: Runspace1
To end the debugging session type the 'Detach' command at the debugger prompt, or type 'Ctrl+C' otherwise.
At /Path/To/PSFunctionApp/HttpTriggerFunction/run.ps1:13 char:1
+ if($name) { ...
+ ~~~~~~~~~~~
[DBG]: [Process:49988]: [Runspace1]: PS /Path/To/PSFunctionApp>>
Zu diesem Zeitpunkt halten Sie an einem Breakpoint (Unterbrechungspunkt) im PowerShell-Debugger. Von hier aus können Sie alle üblichen Debugvorgänge ausführen, also Prozedurschritt, schrittweises Ausführen, Fortfahren, Beenden und andere. Um den vollständigen Satz von Debugbefehlen anzuzeigen, die in der Konsole verfügbar sind, führen Sie die Befehle h oder ? aus.
Sie können haltepunkte auch auf dieser Ebene mit dem Set-PSBreakpoint Cmdlet festlegen.
Nachdem Sie ihr Skript fortgesetzt und vollständig aufgerufen haben, werden Sie folgendes feststellen:
- Die PowerShell-Konsole, in der Sie ausgeführt
Invoke-RestMethodhaben, hat nun ein Ergebnis zurückgegeben. - Die PowerShell-Konsole, in der Sie ausgeführt
Debug-Runspacehaben, wartet auf die Ausführung eines Skripts.
Sie können dieselbe Funktion erneut aufrufen (z. B. mithilfe von Invoke-RestMethod), und der Debugger unterbricht unmittelbar hinter dem Befehl Wait-Debugger.
Überlegungen zum Debuggen
Beachten Sie beim Debuggen des Funktionscodes die folgenden Probleme.
BreakAll kann dazu führen, dass der Debugger an unerwarteter Stelle unterbrochen wird.
Die PowerShell-Erweiterung verwendet Debug-Runspace, was wiederum auf das Feature von BreakAll PowerShell basiert. Diese Funktion weist PowerShell an, beim ersten ausgeführten Befehl anzuhalten. Dieses Verhalten bietet Ihnen die Möglichkeit, Haltepunkte innerhalb des Debug-Runspaces festzulegen.
Die Azure Functions Runtime führt ein paar Befehle vor dem tatsächlichen Aufrufen Ihres run.ps1-Skripts aus, sodass dies dazu führen kann, dass der Debugger innerhalb von Microsoft.Azure.Functions.PowerShellWorker.psm1 oder Microsoft.Azure.Functions.PowerShellWorker.psd1 unterbricht.
Sollte dieser Break passieren, führen Sie den continue- oder c-Befehl aus, um diesen Breakpunkt zu überspringen. Sie halten dann am erwarteten Haltepunkt an.
Problembehandlung
Wenn Beim Debuggen Schwierigkeiten auftreten, sollten Sie folgendes überprüfen:
| Prüfen | Maßnahme |
|---|---|
Führen Sie func --version im Terminal aus. Wenn Sie einen Fehler erhalten, dass func nicht gefunden werden kann, fehlen möglicherweise Core Tools (func.exe) in der lokalen path Variablen. |
Installieren Sie Core Tools neu. |
| In Visual Studio Code muss das Standardterminal Zugriff auf func.exehaben. Stellen Sie sicher, dass Sie kein Standardterminal verwenden, auf dem keine Core Tools installiert sind, z. B. Windows-Subsystem für Linux (WSL). | Legen Sie die Standardshell in Visual Studio Code entweder auf PowerShell 7 (empfohlen) oder Windows PowerShell 5.1 fest. |
Nächste Schritte
Weitere Informationen zum Entwickeln von Funktionen mithilfe von PowerShell finden Sie im Entwicklerhandbuch zu Azure Functions PowerShell.