PowerShell-Scripts in VSCode bearbeiten und ausführen


    Tags: ,

    Welche Funktionen soll eine Lösung für das Management mobiler Geräte (EMM) beherrschen? Kostenlose Check-Liste von baramundi herunterladen »

    (Anzeige)

    Code Runner in Visual Studio CodeVisual Studio Code erlaubt die Aus­führung von PowerShell in einem Terminal und bietet grund­legende Features wie die Syntax­hervor­hebung. Ziemlich umstän­dlich ist jedoch das Starten von Scripts oder An­weisungen aus dem Editor. Ich bespreche hier zwei Exten­sionen, die diese Situation verbessern.

    Damit man eine ähnlich kom­fortable PowerShell-Umgebung erhält wie die ISE, sollte man die Visual Studio Code PowerShell Extension installieren. Sobald man die erste Datei mit der Endung .ps1 speichert, dann empfiehlt VSCode die Installation dieser Erweiterung. Hier müssen Sie dann nur mehr auf die Schaltfläche Installieren klicken.

    Nach dem ersten Speichern einer PowerShell-Datei bietet VSCode die Installation der PowerShell-Erweiterung an.

    Features der PowerShell-Extention

    Die Extension kommt mit einem eigenen Terminal ("PowerShell Integrated Console"). Dieses können Sie alternativ oder ergänzend zu den Shells verwenden können, welche ich in diesem Beitrag beschrieben habe. Leider bietet diese Konsole aber keine Syntax­hervorhebung, anders als die integrierten VSCode-Terminals.

    Die PowerShell-Erweiterung in VSCode bringt ein eigenes Terminal mit.

    Im Editor können Sie Code durch Drücken der F8-Taste ausführen. Wenn Sie eine bestimmte Anweisung starten wollen, dann müssen Sie nur den Cursor in die betreffende Zeile setzen. Das ist praktisch, aber es gibt bessere Möglichkeiten, um Code-Abschnitte in VSCode auszuführen. Ich komme darauf weiter unten zurück.

    IntelliSense zeigt die verfügbaren Optionen an, während Sie tippen, und wenn Sie mit der Maus über ein Cmdlet fahren, dann sehen Sie die Syntax für seine Verwendung.

    IntelliSense in Visual Studio Code

    Das automatische Vervoll­ständigen über die Tab-Taste beschleunigt die Eingabe von Kommandos und Parametern (durch mehrfaches Drücken der Taste erhält man alle Optionen). Das funktioniert auch in der Konsole.

    Der PowerShell Script Analyzer prüft die Qualität des Codes. Vermutlich werden Sie PSScriptAnalyzer anpassen wollen, weil die vorgegebenen Regeln zu streng sind, wenn Sie nur ein paar Code-Snippets auf der Konsole ausführen möchten.

    PSScriptAnalyzer beschwert sich über eine nicht verwendete Variable.

    Das lässt sich erledigen, indem Sie STRG + Umschalten + P betätigen und damit beginnen, "scriptan.." einzutippen. Wählen Sie dann PSScriptAnalyzer Rules und betätigen Sie die Eingabetaste. Nun haben Sie die Möglichkeit, Regeln zu aktivieren oder zu deaktivieren.

    PSScriptAnalyzer-Regeln in VSCode anpassen

    Die Erweiterung hat noch weitere nützliche Features für das Entwickeln von PowerShell-Scripts, die man auf der Web-Seite der Extension oder in der FAQ nachlesen kann. Sie können aber einfach nur STRG +  Umschalten + P drücken und dann "PowerShell" eintippen, um mehr Funktionen zu entdecken. Ich möchte mich hier aber auf die Nutzung von VSCode als Konsole konzentrieren.

    PowerShell-Features in VSCode

    Ausgewählten Code im Editor starten

    Der wichtigste Grund, warum ich eine Script-Umgebung gerne als Konsole nutze, besteht darin, dass man dort Anweisungen in den Editor tippen und gleich von dort ausführen kann. Das ist praktisch, wenn man ähnliche Kommandos oder verschiedene Versionen von Befehlen mehrmals am Tag benötigt. In diesem Fall wählt man einfach jene aus, die für die jeweilige Aufgabe am besten passt.

    Ein weiterer Vorteil ist, dass man eine Anweisung einfach so lange ändern und verbessern kann, bis sie funktioniert. Und wenn ein Einzeiler nicht ausreicht, dann kann man hier gleich ein kleines Script erstellen.

    Weiter oben habe ich erwähnt, dass die PowerShell-Erweiterung die Ausführung von Code erlaubt, indem man im Editor die F8-Taste drückt. Wenn Sie aber ein komplettes Script starten möchten, dann müssen Sie erst den ganzen Code markieren. PowerShell ISE verhält sich hier anders. Außerdem führt die Extension den Code immer in ihrem eigenen Terminal aus, das keine Syntax­hervor­hebung kennt. Und schließlich ruft sie dazu immer Windows PowerShell auf, auch wenn man lieber PowerShell Core verwenden möchte.

    Code ausführen ohne PowerShell-Erweiterung

    Unglücklicher­weise ist der in VSCode eingebaute Mechanismus zum Ausführen von Code ebenfalls etwas umständlich. Das lässt sich jedoch beheben. Aber lassen Sie mich erst beschreiben, wie das eingebaute Feature funktioniert.

    Öffnen Sie zuerst eine neue Datei (STRG + N) und speichern sie (STRG + S). Wichtig ist dabei, dass der Name der Datei die Erweiterung .ps1 erhält, andernfalls erkennt VSCode nicht, dass es sich um ein PowerShell-Script handelt. Daher steht die Syntax­hervorhebung erst dann zur Verfügung, wenn die Datei gespeichert wurde.

    Nun wählen Sie eines der PowerShell-Terminals aus und markieren im Editor den Code, der ausgeführt werden soll. Anschließend drücken Sie STRG + Umschalten + P und tippen "ausgewählten" ein. Jetzt erscheint die Auswahl Terminal: Ausgewählten Text im aktiven Terminal ausführen, die Sie noch bestätigen müssen.

    Ausgewählten Text in VSCode ausführen

    Die Prozedur lässt sich beschleunigen, wenn Sie ihr eine Tastenkombination zuweisen. Der dafür zuständige Befehl befindet sich im Menü Datei unter Einstellungen.

    Tastenkombination zum Ausführen von Code festlegen

    Code ausführen mit Code Runner

    Mit Hilfe der Extension Code Runner ist es viel komfortabler, Scripts oder Fragmente davon im Editor von VSCode zu starten. Um sie zu installieren, klicken Sie in der linken Navigations­leiste auf das Icon für Erweiterungen und tippen anschließend "code runner". Nach der Installation klicken Sie auf Neu starten.

    Code Runner für VSCode installieren

    Bevor ich darauf eingehe, wie sich Code Runner nutzen lässt, müssen wir seine Konfiguration ein bisschen anpassen. Standardmäßig führt diese Erweiterung den Code im Tab Ausgabe aus. Das ist ungünstig, wenn Sie ein interaktives Script starten wollen oder nach dem Ausführen eines Kommandos in der Konsole weiter­arbeiten möchten.

    Um Code Runner mitzuteilen, dass es PowerShell-Anweisungen im Terminal abarbeiten soll, müssen Sie die folgende Zeile in die Einstellungen von VSCode übernehmen. Vergewissern Sie sich, dass alle Einstellungen mit einem Komma abgeschlossen werden, so wie es der Screenshot weiter unten zeigt.

    "code-runner.runInTerminal": true,

    Um Code Runner anzuweisen, anstelle von Windows PowerShell die Core-Version zu verwenden, fügen Sie zusätzlich diese Zeilen in settings.json ein:

    Wie Sie sehen, können Sie hier auch die Execution-Policy anpassen. Die Konfiguration sollte nun so aussehen, wie im folgenden Screenshot angezeigt.

    Konfiguration von Code Runner anpassen über die Benutzereinstellungen

    Code Runner bietet mehrere Möglichkeiten, um Code aus dem Editor zu starten. Wie in der ISE lässt sich ein komplettes Script durch das Anklicken des Symbols Run Code oder durch die Tasten­kombination STRG + ALT + N ausführen.

    Im Unterschied zur ISE führt Code Runner aber die Version des Scripts aus, die Sie zuletzt gespeichert haben und nicht jene, die Sie im Editor sehen. Außerdem verwendet die Extension ihr eigenes Terminal.

    Wenn Sie nur ausgewählten Code starten wollen, dann klicken Sie mit der rechten Maustaste in den markierten Abschnitt und führen aus dem Kontextmenü den Befehl Run Code aus. Alternativ führt nach dem Markieren des Codes die Tasten­kombination STRG + ALT + N zum gleichen Ziel. Um die Ausführung zu beenden, kann man STRG + ALT + M betätigen.

    Code Runner bietet noch eine ganze Reihe von Einstellungen, die den Rahmen dieses Beitrags sprengen würde. Sie können diese in der Datei package.json unter Windows im Verzeichnis
    $env:UserProfile\.vscode\extensions\formulahendry.code-runner-0.9.3
    finden. Unter macOS und Linux lautet der Pfad für die Erweiterungen ~/.vscode/extensions.

    Um eine Einstellung zu ändern, müssen sie nicht package.json editieren. Vielmehr reicht es, diese in die Einstellungen von VSCode zu übernehmen und die Konfiguration dort anzupassen.

    Programmcode mit Code Runner ausführen

    Fazit

    Der Nachteil von Code Runner besteht darin, dass es Kommandos nur in seinem eigenen Terminal ausführen kann. Daher müssen Sie sich entscheiden, ob sie Windows PowerShell oder PowerShell Core verwenden möchten.

    Die PowerShell-Extension hat die gleichen Beschränkungen und ihre Konsole unterstützt keine Syntax­hervorhebung. Das eingebaute Feature zum Ausführen von Code schließlich hat den Vorteil, dass es den Code im aktiven Terminal startet, aber dafür muss man ihn immer erst markieren.

    Aus diesem Grund arbeite ich normaler­weise mit Code Runner und verwende das eingebaute Feature nur, wenn ich Code in einer anderen als der Standard-Shell ausführen möchte. Das bedeutet natürlich nicht, dass die PowerShell-Extension überflüssig ist. Sie bietet sehr nützliche Funktionen im Editor.

    Auch wenn ich hier nur an der Oberfläche geblieben bin, so sollte doch deutlich geworden sein, dass VSCode wesentlich mächtiger ist als die ISE. Nachdem PowerShell Core die Zukunft gehört, würde ich Sie ermuntern, auf sie umzusteigen und dabei auch gleich auf VSCode zu wechseln. Sie ist die perfekte Umgebung, beide Versionen von PowerShell parallel zu nutzen.

    2 Kommentare

    Bild von Chris
    Chris sagt:
    15. Mai 2018 - 12:19

    Wie sieht es beim Script erstellen mit der Autovervollständigung aus, wenn ich CMDlets von Serveranwendungen benutzen will? VSCode habe ich ja lokal auf meinem Rechner. Wenn ich jetzt aber ein Server Script schreiben möchte und zB auf CMDlets des DC zugreifen will, sind die lokal ja nicht vorhanden. Genauso sieht es ja auch mit der Exchange Management Shell aus. Geht das?

    Bild von Michael Pietroforte
    15. Mai 2018 - 13:34

    Die Konsole in VSCode verhält sich genauso wie die Konsole von Windows PowerShell oder PowerShell Core, denn die Konsole wird ja nur in VSCode integriert. Autovervollständigung funktioniert also auch dann, wenn man mit Implicit Remoting arbeitet.