© S&S Media
Die PowerShell Editor Services im Überblick

PowerShell an IDE


Der noch aus DOS-Zeiten stammende Batch-Interpreter behindert Administratoren. Die von Microsoft als Nachfolger auserkorene PowerShell erfuhr bisher nur wenig Unterstützung. Dieses Projekt möchte Drittanbietern die Integration von PowerShell Intelligence erleichtern, um so die Verfügbarkeit von Tooling zu verbessern.

Sagen wir es offen: Einer der Gründe für den Erfolg von Visual Basic war die damals grenzgeniale Integration zwischen GUI-Design-Werkzeug und Programmierumgebung. Wer einmal eine Symbian-Applikation oder ein Android-Programm zusammengebaut hat, weiß über die Vorteile von Rapid Application Development bestens Bescheid. Ob der vergleichsweise geringen Reichweite der PowerShell – sie ist nun mal nicht sonderlich weit verbreitet – scheuten die Anbieter von Editoren und anderer Entwicklerhilfswerkzeuge bisher den Aufwand für die Integration von PowerShell-Support. Microsoft möchte diesem Problem nun durch eine Untergruppe von Unterstützungsbibliotheken abhelfen.

In frühem Entwicklungsstadium

Die PowerShell Editor Services stehen zwar auch als NuGet-Paket zur Verfügung, werden dort aber nur vergleichsweise selten aktualisiert. Wer mit dem API experimentieren möchte, sollte das unter [1] bereitstehende GitHub Repository aufrufen und es von dort herunterladen.

Als nächste Aufgabe wollen wir mit der Erzeugung einer Instanz der PowerShellContext-Klasse beginnen. Sie dient als Interface zwischen PowerShell Editor Services (PSES) und der zugrunde liegenden PowerShell-Implementierung. Die folgenden Schritte erfolgen unter Windows 10 und Visual Studio 2015, als Projektvorlage dient Windows | Classic Desktop | WPF Application – laut Kommentaren im GitHub Repository werden die Versionen 3 und 4 der PowerShell manchmal unterstützt. Dazu muss das aus GitHub heruntergeladene Archiv an einen kommoden Ort im Dateisystem extrahiert werden. Für erste Schritte reicht es aus, wenn Sie das Projekt src\PowerShellEditorServices\Power­ShellEditorServices.csproj in Ihre Solution laden. Es integriert automatisch eine Gruppe von Unterprojekten. Achten Sie darauf, im Hauptprojekt die notwendigen Referenzen anzulegen.

Nicht unter Universal Windows!

Die im GitHub-Projekt bereitgestellten Assemblies zielen auf .NET Core, während die Universal Windows Platform auf dem .NET Framework basiert. Aus diesem Grund scheitert das Hinzufügen einer Referenz auf den bereitgestellten Code mit einer nur wenig aussagekräftigen Fehlermeldung.

Falls Visual Studio das Anlegen der notwendigen Beziehungen verweigert, liegt das normalerweise an fehlenden Paketen. NuGet könnte diese theoretisch automatisch herstellen, darf dies aber laut den Voreinstellungen in älteren Versionen von Visual Studio nicht. Wechseln Sie dazu in die Einstellungsansicht Package Manager | General und setzen Sie die Attribute Allow NuGet to download missing packages und Automatically check for missing pack­ages during build in Visual Studio [2]. Sind die betreffenden Checkboxen gesetzt, so müssen Sie zusätzlich die unter [3] beschriebene Prozedur abarbeiten. Im Spezifischen muss der versteckte Ordner .nuget gelöscht werden, danach ist eine Anpassung der Datei PowerShellEditorServices.csproj erforderlich. Nach getaner Arbeit präsentiert sich die Projektstruktur wie in Abbildung 1 gezeigt.

hanna_powershell_1.tif_fmt1.jpgAbb. 1: Die Referenzen von PowerShell Editor Services dürfen keine Rufzeichen aufweisen

Struktur hoch!

David Wilson baut die von ihm betreuten PowerShell Editor Services nach dem Hub-and-Spoke-Pattern auf: Entwickler erzeugen normalerweise im ersten Schritt eine Instanz der Mutterklasse, um dieser daraufhin einen oder mehrere Unterservices zu entlocken. Fürs Erste wollen wir neben dieser EditorSession auch eine Instanz des ConsoleService anlegen, der für die Kommunikation zwischen laufendem PSES-Programm und Hintergrundapplikation verantwortlich ist:

public partial class MainWindow : Window { EditorSession mySession; ConsoleService myCService;

Im Konstruktor des Hauptformulars erstellen wir im ersten Schritt eine neue Instanz von EditorSession. Diese stellt im Moment einen reinen Platzhalter dar, der vor der Nutzung Verbindung zum Rest der PowerShell aufnehmen muss:

 public MainWindow() { InitializeComponent(); mySession = new EditorSession(); ende

Zur Bevölkerung einer neuen EditorSession sind zwei Parameterobjekte erforderlich. HostDetails liefert Daten zur Arbeitsumgebung – wer alle drei Parameter auf null setzt, bekommt ein normal parametriertes HostDetails-Objekt. ProfilePaths wird von Seiten Microsofts nicht mit Default-Werten ausgestattet, weshalb wir zwei Pfade aus GetFolderPath übergeben:

HostDetails myHD = new HostDetails(null, null, null); ProfilePaths myP = new ProfilePaths("myHost", Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments), Environment.GetFolderPath(Environment.SpecialFolder.UserProfile));

Die eigentliche Einrichtung der EditorSession erfolgt dann durch Aufruf von StartSession. Ab diesem Zeitpunkt stellt das Objekt diverse Member bereit, über die...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang