Nachfolger für Windows PowerShell: PowerShell 7 bringt Log-Forwarding, Credential-Store, Long Term Servicing

    Setup für PowerShell 7 PreviewPowerShell 7 ist die nächste Version von PowerShell Core und beruht auf .NET Core 3.0. Aller­dings ent­fällt der Namenszusatz "Core", weil Micro­soft mit dem Release 7 Windows PowerShell er­setzen will. Daher soll es mit fast allen be­stehenden Windows-Modulen kompa­tibel sein. Hinzu kommen einige neue Features.

    Nur knapp zwei Monate nach der Freigabe von PowerShell Core 6.2 veröffentlichte Microsoft die erste Preview von PowerShell 7. Ziel dieses Major Releases soll es sein, alle unterstützten Plattformen (Windows, Linux, macOS) vollständig abzudecken.

    PowerShell Core nur unter Linux populär

    Zwar liefen die Versionen 6.x Core auch unter diesen drei Betriebs­systemen, aber tatsächlich wurden sie unter Windows kaum genutzt. PowerShell Core erfreute sich vornehmlich unter Linux einiger Beliebtheit.

    Bis dato wird PowerShell Core vor allem unter Linux genutzt.

    Der Grund, warum die Core-Version unter Windows wenig Anklang fand, liegt auf der Hand. Sie bot dort deutlich weniger Funktionen als die im OS vorhandene Windows PowerShell. Entsprechend liefen viele vorhandene Scripts auf der Magervariante nicht. Darüber hinaus fehlt bis dato ein adäquates Gegenstück zur PowerShell ISE, VSCode ist vielen Admins zu komplex.

    Kompatibilität mit ActiveDirectory-Modul

    Daher lag eine wesentliche Anstrengung in der Entwicklung von PowerShell Core darin, sie mit möglichst vielen Modulen von Windows PowerShell kompatibel zu machen. Die Version 6.1 erzielte mit dem Compatibility Pack in dieser Hinsicht bereits große Verbesserungen.

    Mit Windows 10 1809 und Server 2019 führte Microsoft zudem das Attribut CompatiblePSEditions ein, aus dem hervorgeht, mit welchen Editionen von PowerShell ein Modul kompatibel ist. Erfreulich sind hier die Fortschritte bei den RSAT, wo sich in der Version 1803 das Modul ActiveDirectory nicht mit Core nutzen ließ.

    Unter Windows 10 1809 und PowerShell Core 6.2 zeigt der Aufruf

    Get-Module -Name ActiveDirectory | select Name, CompatiblePSEditions

    an, dass die AD-Cmdlets unter Core laufen.

    Viele der RSAT-Module, darunter jenes für Active Directory, lassen sich unter PowerShell 7 verwenden.

    Unter der Preview von PowerShell 7 hat sich die Lage noch weiter verbessert. Während der Befehl

    Get-Module -ListAvailable -SkipEditionCheck |
    where CompatiblePSEditions -NotContains "Core" | measure

    unter Core 6.2 noch 46 inkompatible Module meldet, sind es in der Version 7 nur noch 36.

    Die meisten der vorinstallierten Module von Windows-PowerShell sind bereits mit PowerShell 7 kompatibel.

    Mehr Funktionen dank .NET Core 3.0

    Einen wesentlichen Anteil an diesen Fortschritten hat die Portierung von PowerShell 7 auf .NET Core 3.0, das noch weitere APIs des vollen .NET-Frameworks implementiert. Die Roadmap für PowerShell 7 stellt daher in Aussicht, dass auch grafische Cmdlets wie Out-GridView verfügbar sein sollen, allerdings nur unter Windows. In der aktuellen Preview ist es noch nicht vorhanden.

    Mit der angestrebten (fast vollständigen) Kompatibilität von PowerShell 7 mit den vorhandenen Modulen sieht Microsoft die Zeit gekommen, diese Version als Nachfolger von Windows PowerShell mit dem Betriebs­system auszuliefern. Ein Datum steht dafür steht derzeit jedoch noch nicht fest und außerdem soll parallel dazu Windows PowerShell für einige Zeit erhalten bleiben.

    Längerer Support

    Mit Aufwertung der Core-Edition zum offiziellen Nachfolger für Windows PowerShell geht auch eine neue Support-Regelung einher. Während bis dato die Intervalle für die Unterstützung einer Version recht kurz waren (bis maximal 6 Monate nach dem Erscheinen eines Minor-Release), kündigte Microsoft für die PowerShell 7 eine LTS-Version (Long Term Servicing) an.

    Die anstehende Ablösung von Windows PowerShell durch die auf .NET Core beruhende Variante ist nicht nur unvermeidlich, weil Microsoft eine einheitliche Implementierung für alle Plattformen haben möchte. Vielmehr laufen die beiden Versionen unter Windows in puncto Funktionen immer weiter auseinander, weil Core ständig neue Features erhält, während die Entwicklung von Windows PowerShell mit 5.1 eingestellt wurde.

    Neue Funktionen in 6.x und 7

    So erhielt etwa Core 6.1 Cmdlets für die Verarbeitung des Markdown-Formats und eine neue syntaktische Regel, indem sich Where-Object mit dem Operator -NOT kombinieren lässt. Unter 6.2 kam mit Command Not Found Suggestions ein interessantes experimentelles Feature hinzu.

    Für PowerShell 7 sind weitere vielversprechende Neuerungen angekündigt. So soll das aus Sicherheits­gründen wichtige Logging nicht mehr bloß lokal möglich sein, vielmehr ist eine Konsolidierung der Logs auf einem Rechner im Netz vorgesehen.

    Nachdem PowerShell sich nicht mehr auf die Automa­tisierung von Aufgaben unter Windows beschränkt, sondern zusätzliche Betriebs­systeme sowie Cloud-Dienste unterstützt, müssen Admins immer mehr Anmelde­daten vorhalten. PowerShell soll künftig einen Credential-Store bekommen, in dem man diese Informationen sicher ablegen kann.

    Geplant sind auch immer wieder Änderungen an der Sprache selbst. So diskutiert die Community über die Einführung eines ternären ?-Operators, wie er von Sprachen wie C oder PHP bekannt ist und der einfache if-else-Statements ersetzen kann.

    Verfügbarkeit und Installation

    Die Preview von PowerShell 7 kann für alle unter­stützten Plattformen von Github heruntergeladen werden. Der MSI-Installer richtet sie nach dem bisher üblichen Schema unter $env:ProgramFiles\PowerShell\7-preview\ ein.

    Wie bei Core 6.x bietet das Setup einige Optionen, etwa für einen Menüeintrag im Explorer für PowerShell.

    Wie gewohnt kann PowerShell 7 Preview parallel zu Windows PowerShell oder stabilen Releases von PowerShell 6.x Core installiert werden.

    Keine Kommentare