Vor zehn Jahren hielt die PowerShell mit der Version 2 ihren endgültigen Einzug in die Windows-Systeme. Mit PowerShell Core – der sechsten Version – erweitert Microsoft deren Einsatzspektrum über Betriebssystemgrenzen hinweg. Ein Überblick über die aktuelle Variante im Vergleich mit der „alten“ PowerShell, die nur unter Windows zur Verfügung stand, lohnt sich allemal.

Selbst Windows-Administratoren und -Anwender, die (immer noch) keine Sympathien für die Kommandozeile hegen, haben sicher bereits einmal Kontakt mit der PowerShell gehabt. Schließlich setzt Microsoft in vielen Bereichen der Server- und Desktop-Betriebssysteme auf dieses Tool, wenn es um Installation, Wartung und Betreuung geht. Doch Microsoft beschreitet den Weg zu den offenen Systemen weiter und hat mit der sechsten Version der PowerShell – als PowerShell Core – nun auch die Einsatzmöglichkeiten über Plattformgrenzen hinaus erweitert.

Der Weg und die Veränderungen

PowerShell Core ist mehr als nur die Open-Source-Variante der bekannten Power­Shell. Microsoft hatte die Ankündigung im Jahr 2016 gemacht, und 2018 dann die erste Version von PowerShell Core (mit der Versionsnummer 6, da diese von der ursprünglichen PowerShell weitergeführt wurde) herausgebracht. Die mit den Windows-10-Systemen ausgelieferte und vorinstallierte PowerShell 5.1 gilt als „ausentwickelt“ – sie wird als fertiges Produkt behandelt, zu dem Microsoft nur noch Sicherheits-Updates und Fehlerbehebungen, aber keine neuen Features liefert. Alle weiteren Entwicklungen sollen in das Open-Source-Projekt PowerShell Core fließen.

Die Windows PowerShell basiert auf dem .NET-Framework, wodurch sie sehr eng mit dem Betriebssystem verbunden ist und direkte Zugriffe darauf ermöglicht. Ein Ziel der PowerShell-Core-Entwicklung bestand darin, sie über Plattformen hinweg wie Windows, Linux und macOS einsetzen zu können. Daher kam bei der neuen Software .NET Core als Basis zum Einsatz. Dieses ebenfalls als Open Source entwickelte Framework kann unter anderem ähnliche Funktionen wie das .NET-Framework auch auf Linux- und macOS-Systemen bereitstellen.

Allerdings standen anfangs weniger als 20 Prozent der Funktionen zur Verfügung. Dieser Anteil stieg jedoch in der Zwischenzeit deutlich. Auf der diesjährigen Build-Entwicklerkonferenz im Mai verkündete Microsoft zudem, dass es die bisher vorhandenen drei .NET-Varianten (Framework, Core und Mono) bis zum November 2020 als .NET 5.0 vereinen will. Es bleibt dabei das selbsterklärte Ziel, die Funktionen der PowerShell so genau (und soweit es technisch möglich ist) in der Pow­erShell Core bereitzustellen.

Installation und Test von PowerShell Core

Die PowerShell Core können Nutzer für alle unterstützten Plattformen aus dem Entwickler-Repository Github unter github.com/PowerShell/PowerShell herunterladen. Dort finden Interessierte neben den MSI-Dateien für 32- und 64-Bit-Dateien auch eine Version für macOS (ab der Version 10.12) und diverse Pakete für unterschiedliche Linux-Derivate. Während auf Windows ein einfacher Doppelklick auf die MSI-Datei genügt, um die Installation zu vollziehen, läuft das Ganze unter Linux etwas umständlicher und in Abhängigkeit vom jeweiligen Paket-Manager des eingesetzten Derivats ab. Wir stellten fest, dass es am einfachsten ist, die PowerShell Core direkt über das Paket-Repository der jeweiligen Linux-Distribution herunterzuladen und zu installieren.

Nach einer etwas aufwendigeren Installation als auf einem Windows-Rechner dann auch unter Linux zu finden: PowerShell Core 6.2.1 auf einem System unter Fedora 30.

Microsoft bietet dazu unter docs.microsoft.com/de-de/powershell/scripting/install/installing-powershell-core-on-linux sehr detaillierte Beschreibungen für die verschiedenen Linux-Versionen und ihre unterschiedlichen Paketformate an. Dies funktionierte im Praxistest unter dem aktuellen Windows-10-Release ebenso wie unter einem Ubuntu-Linux in der Version 18.10 und einem Fedora-Linux in der Version 30.

Für die Nutzer der Windows-Version gibt es jedoch einen großen Vorteil: Sie können die Core-Version parallel zur im System vorhandenen PowerShell-Version (5.1 beim aktuellen Windows-10-Release) installieren und einsetzen. Die „neue“ Shell wird in ein anderes Verzeichnis installiert. Die ausführende Datei trägt mit „pwsh.exe“ einen anderen Namen als die Power­Shell (powershell.exe). So ist es leicht möglich, die Unterschiede auf einem Windows-System zu erkunden und die verschiedenen Möglichkeiten gegenüberzustellen. Auch der gleichzeitige Betrieb der beiden Programme ist möglich.

Unterschiede und Gemeinsamkeiten

Während auf den Linux-Systemen eine Version 6.2.1 der PowerShell installiert wird, meldet sie sich unter Windows noch mit 6.2.0. Sieht man einmal von der Farbgebung ab – die PowerShell Core öffnet ein schwarzes, die PowerShell ein blaues Terminalfenster – dann findet der Anwender auch bei der Core-Software die gewohnte Shell-Umgebung, die beispielsweise die Cmdlets farbig kennzeichnet. Gerade Windows-Administratoren müssen sich jedoch daran gewöhnen, dass die PowerShell Core sich in vielen Dingen an das Betriebssystem anpasst, auf dem sie aktiv ist. Während die PowerShell auf den Windows-Systemen sowohl in der dort installierten 5.1-Version als auch in der PowerShell Core nicht zwischen Groß- und Kleinschreibung unterscheidet, richtet sich die Core-Variante auf den Linux-Systemen streng nach den dort herrschenden Richtlinien: Sie unterscheidet nach Groß- und Kleinschreibung, sodass es wichtig ist, beispielsweise die Namen der Cmdlets exakt so aufzurufen, wie der Entwickler sie angelegt hat.

Administratoren, die bereits eine ganze Weile die PowerShell zur Verwaltung ihrer Windows-Systeme einsetzen, sind es gewohnt, Kommandos wie „Get-WmiObject“ oder „Get-CimInstance“ einzusetzen, um mittels der Windows Management Instrumentation (WMI) oder des Common Information Models (CIM) auf Systemeigenschaften und -funktionen zuzugreifen. Dabei geht es um die Microsoft-Implementierung des standardisierten Web- Based Enterprise Management (WBEM) für Windows-Systeme. Da diese Möglichkeiten weder unter Linux noch unter macOS bereitstehen, sind die Befehle auch unter PowerShell Core nicht verfügbar – auch dann nicht, wenn die Shell auf einem Windows-System aktiv. Dies bedeutet auch: Wer seine Power-Skripte über die Plattformen hinweg einsetzen will, sollte am besten gleich unter der Core-Version entwickeln und testen.

Achtung: Cmdlets

Wer zudem Hintergrund-Jobs aus seinen Shell-Programmen heraus starten will, kann das auf Windows-Systemen mit PowerShell 5.1 mittels des Cmdlets „Register-ScheduledJob“ tun. Dieses Cmdlet arbeitet jedoch mit dem Windows-Task-Manager zusammen. Soll ein solches Skript beispielsweise auch unter Linux funktionieren, dann muss dort in der PowerShell Core das Cmdlet „Start-Job“ verwendet werden, das den Skript-Block an das Cron-Programm weiterreicht. Vorsicht ist auch beim Einsatz der „Aliases“ geboten, die in der PowerShell 5.1 beispielsweise Kommandos wie „ls“ und „ps“ bereitstellen, indem sie die Cmdlets mit den entsprechenden Funktionen aufrufen. Da dies Standard-Unix-Kommandos sind, werden bei einem solchen Aufruf in der Power­Shell Core auf einem Linux-System auch als originäre Linux-Kommandos aufgerufen: Dort können Nutzer beispielsweise dann auch „ps -ef“ (alle aktiven Prozesse formatiert anzeigen) eingeben, während dieser Aufruf auf einem Windows-System scheitert.

Alle Cmdlets mit grafischer Ausgabe, wie „Get-Credential“ (um ein Passwort abzufragen) oder „Out-Gridview“ (Ausgabe formatiert in einem Fenster) funktionieren nur konsolenbasierend (bei der Passwort­abfrage) oder überhaupt nicht, etwa bei „Out-Gridview“.

Fazit

Wir konnten an dieser Stelle nur einen kurzen Überblick über die vielfältigen Möglichkeiten geben, die die PowerShell Core bietet. Deshalb raten wir auch dazu, sie einfach parallel zur bestehenden Power­Shell auf den Windows-Rechner zu installieren, um sich damit vertraut zu machen. Zum Abschluss noch ein ganz besonderes Feature, das jedoch etwas Einarbeitung erfordert: Mittels der PowerShell Core lassen sich nun Remote-Sitzungen der PowerShell auch via SSH aufsetzen und durchführen. Dies eröffnet weitere neue Möglichkeiten bei der Arbeit über die Plattformen hinweg.