Tags: PowerShell, Log-Management, Kompatibilität
PowerShell 7 ist die nächste Version von PowerShell Core und beruht auf .NET Core 3.0. Allerdings entfällt der Namenszusatz "Core", weil Microsoft mit dem Release 7 Windows PowerShell ersetzen will. Daher soll es mit fast allen bestehenden Windows-Modulen kompatibel 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 Betriebssystemen, aber tatsächlich wurden sie unter Windows kaum genutzt. PowerShell Core erfreute sich vornehmlich unter Linux einiger Beliebtheit.
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.
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.
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 Betriebssystem 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 Sicherheitsgrü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 Automatisierung von Aufgaben unter Windows beschränkt, sondern zusätzliche Betriebssysteme sowie Cloud-Dienste unterstützt, müssen Admins immer mehr Anmeldedaten 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 unterstützten Plattformen von Github heruntergeladen werden. Der MSI-Installer richtet sie nach dem bisher üblichen Schema unter $env:ProgramFiles\PowerShell\7-preview\ ein.
Wie gewohnt kann PowerShell 7 Preview parallel zu Windows PowerShell oder stabilen Releases von PowerShell 6.x Core installiert werden.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
- Microsoft gibt PowerShell 7 frei: die wichtigsten Neuerungen im Überblick
- PowerShell 7 Release Candidate inklusive Support freigegeben
- Log-Einträge und Dateien verschlüsseln mit PowerShell und GPO
- Deep Scriptblock Logging: PowerShell-Kommandos im Eventlog aufzeichnen
- PowerShell-Logging: Befehle in Transcript-Datei aufzeichnen
Weitere Links