Tags: PowerShell, Kompatibilität, Linux
Ein großes Defizit von PowerShell Core 6.0 war die geringe Anzahl an mitgelieferten Cmdlets. Viele der unter Windows bereits vorhandenen Module ließen sich zudem nicht nutzen. Diesen Zustand ändert nun die Version 6.1 durch eine verbesserte Kompatibilität. Die AD-Cmdlets funktionieren aktuell aber noch nicht.
Das große Anliegen von PowerShell Core ist die Plattformunabhängigkeit. Dadurch lassen sich Rechner mit verschiedenen Betriebssystemen einheitlich verwalten, etwa Macs oder Linux-PCs von Windows aus. Mit der Portierung auf macOS und Linux schrumpfte PowerShell Core aber auf den kleinsten gemeinsamen Nenner.
Keine Vorteile für Windows-Admins
Gerade für Windows-Benutzer, die fast alle Komponenten des Systems und zahlreiche Anwendungen mit PowerShell steuern können, bedeutete das einen Rückschritt, ebenso der Verlust der grafischen Entwicklungsumgebung ISE. Daher überrascht es nicht, dass PowerShell Core 6 laut Microsoft zu rund 80 Prozent unter Linux eingesetzt wird.
Für die Version 6.0 gab es zwar die Aussage, dass ein großer Teil der vorhandenen PowerShell-Module mit Core kompatibel seien. Welche das genau sind, blieb unklar, und ihre Integration musste manuell über die Anpassung des Modulpfads erfolgen.
PowerShell Core 6.1 mit Compatibility Pack
PowerShell Core 6.1 enthält nun unter Windows das Compatibility Pack, das die abgespeckten APIs von .NET Core um viele Funktionen aus dem regulären .NET-Framework erweitert. Gleichzeitig setzt es nun auf .NET Core 2.1 auf, das gegenüber der Version 2.0 deutliche Performance-Verbesserungen bringen soll.
Fortschritte gibt es zudem bei der Integration der Module von Windows PowerShell, weil man sie nicht mehr selbst in den Pfad aufnehmen muss. PowerShell Core 6.1 berücksichtigt automatisch jene Module, die es unter
$env:WinDir\System32\WindowsPowerShell\v1.0\Modules
findet.
Markierung von Modulen als Core-tauglich
Freilich sind immer noch nicht alle davon für den Einsatz unter Core geeignet. Im Unterschied zu bisher legt sich Microsoft nun aber fest, welche Module sich verwenden lassen. In Windows 10 1809 und Server 2019 werden die kompatiblen Module für Windows PowerShell als Core-tauglich markiert. Der Befehl
Get-Module -ListAvailable
zeigt standardmäßig nur diese an. Möchte man alle Module sehen, dann gibt man zusätzlich noch den Schalter SkipEditionCheck an. Dabei sieht man auch die Eigenschaft CompatiblePSEditions, die Aufschluss darüber gibt, unter welchen Editionen von PowerShell sich die jeweiligen Module einsetzen lassen.
In älteren Versionen des OS weisen die Module von Windows PowerShell diese Markierung nicht auf, so dass man hier nicht erkennen kann, welche sich unter Core nutzen lassen.
Das trifft natürlich auch auf Module zu, welche über die RSAT 1803 installiert werden, wie etwa jenes für Active Directory. Daher gilt es als inkompatibel mit Core. Laut Microsoft genießt es jedoch höchste Priorität, so dass abzuwarten bleibt, ob die RSAT für Windows 10 1809 hier Abhilfe schaffen.
Viermal so viele Module verfügbar
Die Auswirkungen der Kompatibilitätsmaßnahmen sind unübersehbar. Während der Befehl
Get-Module -ListAvailable | measure -l
unter PowerShell Core 6.0 nur 13 Module ausweist, stiegt diese Zahl unter 6.1 auf 53. Entsprechend verhält es sich bei den Cmdlets, wo
(Get-Module -ListAvailable).ExportedCommands | measure -sum Count
unter Core 6.0 nur 353 findet, während es auf einem frisch installierten Windows 10 Build 17744 nun 1295 sind. Microsoft reklamiert in der Ankündigung von PowerShell Core 6.1 sogar die Zahl von 1900 kompatiblen Cmdlets.
Neben wesentlichen Thema der Kompatibilität mit bestehenden Modulen, die nach und nach auf 100 Prozent steigen soll, bringt die Version 6.1 noch weitere Neuerungen. Dazu zählt die Unterstützung der neuesten OS-Versionen, darunter auch Server 2019, sobald er erscheint.
Integration mit AppLocker und Device Guard
Hinzu kommt der Support für Whitelisting-Funktionen wie AppLocker und Device Guard, bei deren Aktivierung PowerShell Core nun ebenfalls in den Constrained Language Mode schalten kann. Dort stehen einige sprachliche Mittel nicht zur Verfügung, die als sicherheitskritisch gelten, etwa der Zugriff auf COM-Objekte oder mehrere .NET-Typen.
Zu den kleineren, aber dennoch nützlichen Änderungen zählen zudem:
- Das Setup bietet an, gleich das Remoting zu aktivieren. Außerdem fügt es optional einen Befehl für PowerShell Core in das Kontextmenü des Explorers ein.
- Mit an Bord sind vier neue Cmdlets zur Bearbeitung von Dateien im Markdown-Format, die es unter Windows PowerShell nicht gibt. Außerdem wurde Test-Connection auf Core portiert.
- Heftet man das Icon für PowerShell Core 6.1 an die Taskleiste, dann findet sich im Kontextmenü nun auch der Befehl Run as Administrator.
- Der Befehl cd - führt zurück in das vorhergehende Verzeichnis, cd -- nach $HOME
- Where-Object lässt sich jetzt mit dem Operator -NOT kombinieren, um über einen Filter bestimmte Einträge auszuschließen. So würde
Get-ChildItem | where -Not IsReadOnly
alle Dateien anzeigen, die keinen Schreibschutz haben.
Verfügbarkeit und Installation
PowerShell Core 6.1 kann für alle unterstützten Plattformen von Github heruntergeladen werden. Das offizielle Release installiert sich nun unter $env:ProgramFiles\PowerShell\6\, während die Previews dafür $env:ProgramFiles\PowerShell\6-preview\ nutzten.
Wie gewohnt kann PowerShell Core parallel zu Windows PowerShell installiert und verwendet 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-Modul für Exchange Online (EXO v2) unterstützt nun macOS und Linux
- PowerShell 7 Release Candidate inklusive Support freigegeben
- Anleitung: PowerShell 7 unter Windows und Linux installieren
- Nachfolger für Windows PowerShell: PowerShell 7 bringt Log-Forwarding, Credential-Store, Long Term Servicing
Weitere Links