Egal ob klassische Verwaltung on Premise oder etwas moderner in der Cloud, ob native Windows-Steuerung oder Verwaltung von Exchange, SharePoint und System Center - am Thema PowerShell kommt in der Microsoft Administration heute eigentlich niemand mehr vorbei. Dabei fing alles relativ harmlos mit Windows Server 2008 und Exchange Server 2007 an...

Meine ersten Gehversuche mit skriptbasierter Steuerung von zunächst Windows NT 4.0 und anschließend Windows 2000 waren eher ernüchternd: an der grafischen Oberfläche geht fast alles und ergänzend besteht - im jeweiligen Kontext - die Möglichkeit, an der Eingabeaufforderung begrenzt Vorgänge zu steuern, auf sehr spezielle Funktionen zurückzugreifen, oder eben einige Vorgänge durch Batch-Dateien zu automatisieren. Selbst mit der Einführung von Windows Server 2003 - wo bereits das Gros der Verwaltung auch über die Eingabeaufforderung erreichbar ist - sind die Einschränkungen spürbar und es existiert darüber hinaus keine konsistente Befehlsstruktur über den jeweiligen Anwendungsbereich hinaus. Das hat sich mit der Einführung der PowerShell umfangreich geändert.

Die Grundlagen der heutigen PowerShell werden im Jahr 2002 von Jeffrey P. Snover, seit Ende der 1990er Jahre Microsoft-Mitarbeiter, in seinem Monad Manifest [hier] erstmalig beschrieben und im gleichnamigen Microsoft Projekt durch ihn umgesetzt. Die erste Version der PowerShell wird zeitgleich mit der neuen Windows-Desktopvariante Windows Vista, später auch für Windows Server 2008, veröffentlicht und lässt sich zunächst wahlweise installieren. Erste große Bekanntheit erfährt die PowerShell durch den Umstand, dass sie als offizielle Verwaltungsschnittstelle für den Exchange Server 2007 fungiert [hier]. Ab der zweiten PowerShell-Generation ist die Shell direkt mit der jeweiligen Betriebssystemgeneration verbunden und kann nicht mehr entfernt werden. Dadurch ergibt sich aktuell die folgende Versionierung der PowerShell...

Die ersten Versionen mit der Bezeichnung Windows PowerShell - basierend auf der Common Language Runtime (CLR) des .NET Frameworks - sind noch eng an die Microsoft-Betriebssysteme gebunden und mit jeder neuen Windows Plattform erscheint zu Beginn auch jeweils eine neue Version der Windows PowerShell. Stets mit entsprechenden Erweiterungen und neuen Möglichkeiten. Mit dem veränderten Supportmodell von Windows 10 und neueren Versionen des Windows Servers ändert sich diese Vorgehensweise und wir sehen zunächst erste 'Nebenversionen' - auf die Windows PowerShell 5.0 folgt die Versionsnummer 5.1. Diese wird fortan beibehalten und die Aktualität der PowerShell nun über zwei weitere Codes definiert: die Build- und die Revisionsnummer...

Die Build-Nummer wird zumeist - aber leider nicht ausschließlich - durch die regelmäßigen Feature- und Versionsupdates bestimmt, während die Revisionsnummer üblicherweise durch die monatlichen Qualitätsupdates angehoben wird. Offiziell ist die Weiterentwicklung der Version 5.1 und der Windows PowerShell im Allgemeinen jedoch bereits beendet. Abgelöst wurde sie durch die PowerShell Core.

Die PowerShell Core 6 ist als plattformübergreifende und quelloffene Shell definiert und wird neben Windows auch auf macOS, einigen Linux-Distributionen und ARM Geräten unterstützt. Darüber hinaus stehen Docker-Images mit vorinstallierter PowerShell zur Verfügung. Allerdings muss für diese Funktionalität auf das .NET Core 2.0 zugegriffen werden - eine Plattform innerhalb des .NET-Frameworks. Der daraus resultierende Leistungsumfang ist jedoch nicht mit dem der Windows PowerShell 5.1 vergleichbar. Die in kurzen Abständen erscheinenden Versionen 6.1 und 6.2 ändern an diesem Sachverhalt nur wenig und bringen nur geringe Erweiterungen oder Leistungsvorteile gegenüber den vorherigen Versionen. In der Windows-Infrastruktur kann sich die PowerShell Core damit nicht gegen die Windows PowerShell 5.1 behaupten, während in der Linux-Welt eine erste Verbreitung der PowerShell beginnt. Das soll sich aktuell aber durch die PowerShell 7 auf breiter Front ändern.

Die PowerShell 7 verzichtet auf den Präfix 'Windows' und das Suffix 'Core' und deutet damit die Ablösung, sowohl für die Windows PowerShell 5.1, als auch für die PowerShell Core 6.x an. Sie folgt dabei einer ähnlichen Update-Strategie wie die Core-Versionen und wird regelmäßig aktualisiert. Als ebenfalls plattformübergreifende und quelloffene Shell unterstützt sie analog den Befehlsumfang der bisherigen Windows PowerShell-Varianten. Erreicht wird dies durch die konsequente Weiterentwicklung des .NET Core. Die derzeitig aktuelle Implementierung des .NET-Frameworks in der Version 4.8 soll die letzte monolithische Veröffentlichung in der Windows-Hemisphäre gewesen sein - zum Dezember 2020 sind .NET-Framework und .NET Core unter der Bezeichnung .NET 5.0 zusammengelaufen, aktuell befindet sich .NET 6.0 in der Entwicklung. Dabei bildet .NET Core die Grundlage dieser Infrastruktur.