Tags: PowerShell, Kompatibilität, Linux
Rund ein halbes Jahr nach der Preview 1 veröffentlicht Microsoft nun PowerShell 7. Wie PowerShell 6 Core handelt es sich dabei um eine Cross-Plattform-Version, die auch unter macOS und Linux läuft. PowerShell 7 verbessert die Kompatibilität mit Windows PowerShell und bringt einige Neuerungen in der Sprache selbst.
Anders als die Core-Version soll PowerShell 7 nicht bloß parallel zu Windows PowerShell existieren, sondern der Nachfolger für beide werden. Microsoft gab bereits bei der ersten Ankündigung bekannt, dass Windows PowerShell nicht mehr weiterentwickelt wird und Innovationen nur noch der Multi-Plattform-Ausführung zugute kommen.
Kompatibilität mit Windows PowerShell
Aus diesem Grund lag ein Schwerpunkt der Entwicklung von PowerShell 7 darauf, eine möglichst hohe Kompatibilität mit Windows PowerShell zu erzielen. Dies wurde zum einen durch den Umstieg auf .NET Core 3.1 erreicht, das wesentlich mehr API-Funktionen des vollständigen Frameworks unterstützt als .NET Core 2.x in PowerShell 6.
Zum anderen lassen sich inkompatible Module über implizites Remoting nutzen. Dabei startet PowerShell 7 im Hintergrund eine Session auf Basis von Windows PowerShell, wo die betroffenen Cmdlets ausgeführt werden. Die Kommunikation erfolgt für den Benutzer transparent über PowerShell-Remoting. Für diesen Zweck unterstützt das Cmdlet Import-Module nun den Parameter UseWindowsPowerShell.
Unterschiedliche Funktionsumfänge
Der Dokumentation der Module und Cmdlets zufolge gibt es noch eine ganze Reihe von Befehlen, die in der Version 7 noch nicht verfügbar sind. Dazu zählen demnach etwa all jene zur Verwaltung lokaler User und Gruppen, mehrere Cmdlets für das Management von Jobs und für Diagnose oder für den Zugriff auf das Eventlog.
Allerdings zeigt sich, dass umgekehrt auch PowerShell 7 über mehrere Cmdlets verfügt, die es in Windows PowerShell nicht gibt und nicht geben wird. Darunter fallen etwa Get-Error, Remove-Service, Get-Uptime, Join-String oder solche für das Verarbeiten von Markdown.
PowerShell-Anwender finden sich somit aktuell in der Situation, dass die Version 7 noch nicht alle Möglichkeiten der alten Shell bietet, aber sie umgekehrt immer mehr Neuerungen erhält, auf die sie in Windows PowerShell verzichten müssen.
Sprachänderungen
Dies betrifft nicht nur die erwähnten Cmdlets, sondern auch eine ganze Reihe von Änderungen an der Sprache selbst. Dazu zählt die Einführung eines ternären Operators nach dem Muster
$true ? "Wahr" : "Falsch"
sowie die logische Verkettung von Befehlen wie von den Unix-Shells bekannt:
alias ls && "Wird nur ausgeführt, wenn der erste Befehl erfolgreich ist"
Hinzu kommt ein Operator für die Prüfung eines Ausdrucks auf $null (Null-coalescing):
$test ?? "Variable test ist null"
Zu den exklusiven Neuerungen von PowerShell 7 gehören auch die parallele Ausführung von ForEach-Object oder die aktuell noch experimentellen Operatoren, mit denen man den Zugriff auf Methoden und Eigenschaften von Objekten vermeidet, deren Wert Null ist.
Inkonsistenz zwischen den Plattformen
Eine noch größere Funktionslücke klafft zwischen den Ausführungen von PowerShell 7 für die verschiedenen Plattformen. Während die verbesserte Kompatibilität mit Windows PowerShell insgesamt zu einem großen Funktionsumfang führt, beschränkt sich dieser unter Linux und macOS auf die Module, die zum Lieferumfang von PowerShell 7 gehören. In der oben erwähnten Dokumentation sind 173 Cmdlets mit "Windows only" markiert.
Wie bereits bei PowerShell 6 basiert das Remoting zwischen den verschiedenen OS auf SSH, während von Windows zu Windows nach wie vor WinRM unterstützt wird. Ersteres aktiviert man bei den einschlägigen Cmdlets wie Enter-PSSession, indem man den Remote-Rechner über den Parameter HostName angibt. Dagegen führt die Verwendung von ComputerName wie gewohnt zu einer Verbindung über WinRM.
Systemvoraussetzungen und Verfügbarkeit
PowerShell 7 läuft unter Windows 7 und Server 2008 R2 oder höher, macOS 10.13 oder neuer sowie auf verschiedenen Linux-Distributionen (RHEL / CentOS 7+, Fedora 29+, Debian 9+, Ubuntu 16.04+, openSUSE 15+, etc.).
Aktuell gibt es noch keine Aussage von Microsoft, wonach PowerShell 7 künftig als Bestandteil des Betriebssystems oder über WSUS ausgeliefert wird. Vielmehr muss man das passende Paket von Github holen.
Es enthält bereits .NET Core und man muss es abhängig vom OS mit den dortigen Mitteln installieren (siehe dazu: PowerShell 7 unter Windows und Linux installieren). PowerShell 7 lässt sich parallel zu Windows PowerShell betreiben.
Der Support-Zyklus der Version 7 richtet sich nicht nach jenem des Betriebssystems, sondern orientiert sich an .NET Core 3.1. Dieses ist im Dezember 2019 erschienen und erhält ab diesem Zeitpunkt drei Jahre Unterstützung. Es handelt sich bei PowerShell 7 somit um ein Long-Term-Servicing-Release.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- PowerShell Core 6.1: Wesentlich mehr Module und Cmdlets unter Windows verfügbar
- WSL: Linux-Apps in Windows und Windows-Apps unter Linux ausführen, auf ext4 und NTFS zugreifen
- Dateien zwischen Windows und Linux kopieren mit SCP und PowerShell
- PowerShell-Modul für Exchange Online (EXO v2) unterstützt nun macOS und Linux
- PowerShell 7 Release Candidate inklusive Support freigegeben
Weitere Links
2 Kommentare
Powershell v6 wird stillschweigend deinstalliert.
Ebenso fehlen u. a. die get-help-Optionen -Full und -Examples. Auch nach Deinstallation von v7 stehen sie nicht mehr zur Verfügung. Was soll diese Heimlichkeit?