PowerShell Core 6.0 unter Linux installieren

Bei meiner täglichen Arbeit, komme ich mit Microsoft Windows Systemen und PowerShell in Berührung. Privat beschäftige ich mich jedoch überwiegend mit Linux und Open Source Themen.  Umso interessanter finde ich es, dass beide Welten immer mehr mit einem Werkzeug administriert werden sollen. Wenn es nach Microsoft geht, ist dieses Werkzeug PowerShell Core. Letzten Monat hat Microsoft dies in der Version 6.0 veröffentlicht.

PowerShell Core 6.0 unter Linux

PowerShell Core und Windows PowerShell?!

Ein kurzer Umriss, für alle die damit nicht so vertraut sind. PowerShell ist ein Kommandozeilen-basiertes Framework womit sich Vorgänge automatisieren und Systeme administrieren lassen. PowerShell Core (PSCore) ist als Open Source (MIT-Lizenz) für Windows, Linux sowie macOS verfügbar.  PSCore ist eine Abspaltung (Fork) von Windows PowerShell.

PSCore setzt auf der CoreCLR (.NET Core Common Language Runtime), was im Gegensatz zum proprietären Windows PowerShell der CLR (Common Language Runtime) des .NET Framework und Microsoft liefert dies mit Windows als Teil des Windows Management Framework (WMF) aus.

Mit PowerShell Core kann man allerdings nur die Funktionen von .NET Core und .NET Standard nutzen. Dies liegt daran, dass im Hintergrund für statisches .NET-Methoden oder C#-Cmdlets immer auf die Runtimes von .NET Core zurückgegriffen wird. Einige PowerShell Module wie z.B. ActiveDirectory werden laut Microsoft nicht für PowerShell Core unterstützt. Dies bedeutet aber nicht, dass diese nicht lauffähig sind (Konnte ich leider nicht testen). Also Achtung, die Befehle sind nicht über alle Versionen für unterschiedliche Betriebssysteme gleich. PowerShell Core stellt nur einen Teil der Befehle und Module von Windows PowerShell zur Verfügung.

Vorteile PowerShell Core auf Linux?

Diese Frage hat mich erst etwas länger beschäftigt. Wenn man es aber aus Sicht eines reinen Windows Administrator sieht, dann kann man sich auf einem Linux Host ähnlich wie auf einem Windows Server in PowerShell bewegen und Befehl abfeuern um Informationen zu erhalten. Ein Linux Administrator hingegen wird hier (Ohne PowerShell Kenntnisse) keine Vorteile erhalten. Die Mischung macht es! Wenn man auf beiden Systemen zu Hause ist, dann können beide mit (fast) den gleichen Befehlen administriert werden. Außerdem stehen einem so .Net Standard Funktionen unter Linux zur Verfügung (z.B. “[math]::pi”).

Wie PowerShell Core auf Linux installieren?

Das Microsoft PowerShell Team stellt auf GitHub für Ubuntu, Debian *.deb und für CentOS, Red Hat Enterprise, OpenSUSE, Fedora *.rpm offizielle Pakete mit einer Installations-Anleitung zur Verfügung. Unterstützung von der Community gibt es dabei für Arch Linux, Kali Linux und andere Linux Versionen die mit *.AppImage umgehen können.

Wer direkt aus dem Microsoft repository PowerShell unter Ubuntu 17.04 installieren möchte, geht wie folgt vor:

# Import the public repository GPG keys
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

# Register the Microsoft Ubuntu repository
curl https://packages.microsoft.com/config/ubuntu/17.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list

# Update the list of products
sudo apt-get update

# Install PowerShell
sudo apt-get install -y powershell

# Start PowerShell
pwsh

Weitere Informationen was bei PowerShell Core Version 6.0 neu ist, findet ihr bei Microsoft.

PSCore gut zu Wissen!

Im Gegensatz zu Windows PowerShell oder der normalen Linux Konsole gibt es ein paar Dinge bei PSCore unter Linux zu beachten.

  • Aliase
    • Einige unter Linux bekannte Befehle wie z.B. “ls”, “cat” oder”man” sind unter Windows ein Alias für entsprechende PowerShell CMDlets. Diese stehen daher nicht unter Linux oder macOS zur Verfügung, da es hier eigenständige Befehle (außerhalb von PowerShell) sind. Bei PSCore unter Linux gibt es aber auch Aliase die genutzt werden können (Aufruf über “alias”).
  • Case-sensitivity
    • Unter Linux wird zwischen Groß-/Kleinschreibung auch in Powershell Core unterschieden. Bei PSCore unter Windows ist dies nicht so.
  • Slash
    • Für Pfadangaben unter Windows werden beide Schrägstriche (Slash) akzeptiert, sowohl Slash “/” als auch Backslash “\”. Unter Linux und macOS ist dies nicht so. Hier wird nur “/” in Pfadangaben akzeptiert. Zum bilden von Pfaden sollte man in PowerShell Befehle (CMDlets) wie “Split-Path” oder “Join-Path” sowie PowerShell Umgebungsvariablen “$pwd” oder $PSScriptRoot einsetzen.
  • Object-Type
    • Unter Linux liefern Befehle wie z.B. “ls” einen String in PowerShell Core zurück (Siehe Punkt Alias). In Windows hingegen sind es Objekte die zurückgegeben werden (Get-ChildItem” alias “ls”). Generell geben die meisten PowerShell CMDlets (Betriebssystem unabhängig) ein Objekt zurück.

Persönliche Erfahrung

PowerShell Core unter Linux zu nutzen, während man vorher Windows PowerShell fast täglich anwenden, erfordert zum umdenken. Außerdem ist man durch die geringen Befehle (CMDlets) und fehlenden zusätzlichen Module  teilweise stark eingeschränkt. Dies kann einem beim Linux PowerShell Skripting als Windows Administrator schnell zum Verhängnis werden.

Womit ich in letzter Zeit unter Windows PS beschäftigt habe ist Common Information Model (CMI), zum auslesen von Informationen (ähnlich der WMI (Windows Management Instrumentation)). Diese Unterstützung ist zur Zeit nicht geplant. Es könnte aber wie andere Features zukünftig, sofern die Entwickler-Community dies wünsch, implementiert werden.

Ich sehe PSCore noch nicht als Sinnvollen Ersatz für die gute alte  Konsole (bash) in Verbindung mit einigen Tool unter Linux an. PSCore hat aber Potenzial für Administratoren als übergreifendes Werkzeug zu dienen, wenn diese verschiedene Betriebssysteme in einem Netzwerk betreuen müssen. Evtl. nehme ich aber dies auch nur so war, da Windows und Linux bisher immer getrennt betrachtet wurden und PowerShell mir aktuell nur unter Windows Vorteile bringt. Für Windows Administratoren bringt PowerShell Core unter Linux sicherlich Vertrautheit und den Vorteil sich nicht mit den Eigenheiten der Linux Konsole (bash) beschäftigen zu müssen.