PowerShell Core

Mit der Installation von Windows 10 1903 hat sich meine PowerShell-Konsole etwas verändert. Prominent wurde der Link auf https://aka.ms/pscore6 eingeblendet.

Also sollte ich mich damit nun auch mal befassen.

Im März 2020 hat Microsoft die PowerShell 7 released. Siehe dazu PowerShell 7

Einordnung

Gehört und gelesen habe ich von PowerShell Core schon früher. Interessant ist hierbei zum einen die Neuentwicklung auf Basis des .NET Core-Framework statt dem "großen" regulären NET Framework. Damit verbunden ist aber auch eine gewissen Portabilität. PowerShell ist nun nicht mehr auf Windows beschränkt, sondern kann auch auf diversen Linux-Varianten (Ubuntu, Debian, CentOS, Redhat, OpenSuse, Fedora) aber auch MacOS und ARM ausgeführt werden. Selbst fertige Docker-Container gibt es von Microsoft.  Auch die Versionsnummer zeigt es deutlich an.

Produkt PowerShell Core PowerShell

Versionen

6.x, 7.x ff

1.0 -5.x

Plattform

Windows, Linux, Arm, MacOS

Windows Client und Server

Unterbau

.Net Core Framework

.Net Framework

Hauptprozess

pwsh.exe

powershell.exe

Zukunft

  • Fehlerbehebungen
  • Sicherheitsupdate
  • Funktionserweiterungen
  • Fehlerbehebungen
  • Sicherheitsupdates

Ausgabe von
$PSVersionTable.PSEdition

"Core"

"Desktop"

Windows Forms Nutzung

Ab Version 7 Preview 2

Ja

Anhand der Tabelle ist schon gut zu sehen, dass PowerShell Core mit der Versionsnummer 6 als Nachfolger von PowerShell 5 gesehen wird und die klassische PowerShell keine weitere Entwicklung erfahren wird. Microsoft macht hier also wieder einen Schnitt. Die alte PowerShell hat lange gute Dienste getan aber ist nun mal auf Windows beschränkt und schleppt einige Altlasten mit. Mit PowerShell Core gibt es einen Neustart, bei der Microsoft hoffentlich auch alten Fehlern gelernt hat. Damit stellt sich natürlich zuerst einmal die Frage der Rückwärtskompatibilität. Kann ich denn auch weiterhin Exchange Server und Skype for Business verwalten, wenn ich nur noch die Core-Powershell haben und kann ich dann z.B. auch unter Linux plötzlich die gleichen Funktionen nutzen, die auch unter Windows vorhanden sind? Wie sieht es mit "betriebssystemnahen" Themen aus wie Perfmon, Eventlog, WMI oder auch TCP-Sockets? Ich habe daher einfach meine Skripte mal unter PWSH gestartet. Im gleichen Zuge stellen sich die Fragen natürlich auch, welche meiner bisherigen Skripte schon mit PowerShell Core laufen und wie schnell ich nur noch für Core entwickeln werden. Das ist besonders interessant, wenn die Skripte als Docker-Container gekapselt werden können.

Die Ergebnisse sind vielversprechend:

Bereich Skripte

End2End

End2End-HTTP, End2End-Ping, End2End-UDP3478, End2End-PathPing, End2End File,

Exchange

End2End EWS

Skype for Business

 

SharePoint

Meine Versuche die SharePoint Online PowerShell zu erreichen waren bislang erfolglos. Ich kann in PWSH noch ein "install-module -Name Microsoft.Online.SharePoint.PowerShell" machen aber kein "Importmoduke". Der Fehler lautet

Could not load type 'Microsoft.SharePoint.Client.CustomerKeyVaultKeyType' from assembly '
Microsoft.SharePoint.Client, Version=16.1.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'.

Office 365

Um die Kompatibilität mit Office 365 zu testen, habe ich die Schritte von Office 365 - PowerShell unter PWSH ausgeführt:

  • Connect-MSOLService
    Modul kann mit "install-module msonline" installiert und mit "import-module msonline" eingebunden werden. Aber beim "Connect-MsolService" kommt ein Fehler, dass "System.Windows.Forms" nicht gefunden wird
  • Azure AD
    Das Modul kann mit "Install-Module -Name AzureAD" installiert werden aber beim Import-Module kommt auch ein "System.Windows.Forms" nicht gefunden.
    In der Azure Cloud Shell funktioniert dies aber schon. So sollte es bald auch ein Update für einen lokalen Einsatz geben
  • Exchange Online
    Für Exchange Online ist kein Modul erforderlich, sondern eine PS-Session gestartet. Dies funktioniert
  • Skype for Business Online/Teams
    Auch mit installiertem Skype for Business Online Modul kann es mit "Import-Module SkypeOnlineConnector" nicht eingebunden werden

Hinsichtlich Office 365 ist die Kompatibilität mit PWSH noch etwas eingeschränkt (Stand Juni 2019). Nur Exchange Online ist hier schon "kompatibel".

Weitere Skripte muss ich noch testen. Speziell Skripte, die auf Servern laufen, erfordern natürlich die Installation von PWSH auf dem Server. Ich bin aber sicher, dass die meisten Skripte schon laufen oder bald laufen werden.

Es gibt aber auch noch Einschränkungen je nach Plattform, die ich aber noch nicht alle ermittelt habe. Feedback wird gerne genommen.

Plattform Windows MacOS Linux ARM

Module ohne Abhängigkeiten laden

Ja

?

?

?

Module mit Abhängigkeiten zu NET Framework u.a. enthalten

Nein

Nein

?

?

Zugriff auf Windows Forms

Aber 7 Beta 2

?

?

?

Interessant ist, das die PowerShell Core auch ca. bei meinem einfachen End2End-CPU-Test 30% schneller ist.

Installation unter Windows x64

Aktuell ist die PWSH noch nicht Bestandteil von Windows, sondern muss manuell nachinstalliert werden. Die Voraussetzungen sind je nach System unterschiedlich. Bei Windows müssen Sie dazu ggfls. noch die VisualC-Runtime mit installieren, ehe Sie die MSI-Installation durchführen können.

PowerShell Core 6 Download
https://aka.ms/pscore6
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-6#powershell-core
Für Windows, Linux-Derivate, ARM (auch Raspberry) u.a.

Sie können PowerShell Core natürlich auch "unattended" installieren. Der Aufruf sollte Administratoren aber schon bekannt sein. Auf den Anleitungsseiten von Microsoft steht aber auch, wie Sie PowerShell Core auf Windows IoT und NanoServer installieren. Da ist es einfach ein "Auspacken"

msiexec /i .\PowerShell-6.0.0-win-x64.msi /q

Wenn Sie interaktiv installieren, dann gibt es nur wenige Fenster zu bestätigen, um den Zielpfad und den Grad der Integration auszuwählen:

Die neue PowerShell kann ich einfach über den Aufruf von "PWSH" starten. Sie meldet sich natürlich anders und läuft problemlos parallel zur alten PowerShell

PowerShell auf Linux/RasPi

Da das Net Core-Framework auch auf anderen Plattformen vorhanden ist, steht einem Einsatz der Powershell Core auf eben diesen Plattformen auch nicht mehr viel im Wege. Microsoft selbst bietet schon entsprechende Pakete für Linux, MacOS und ARM. Wenn Sie etwas im Internet suchen, dann finden Sie auch sehr schnell entsprechende Hinweise, wie Sie PowerShell auf diesen anderen Plattformen installieren. Ich werde daher die Schritte hier nicht noch mal beschreiben.

Interessant finde ich aber den Ansatz, dass das gleiche Script quasi auf allen Plattformen laufen könnte. Sicher wird ein PowerShell-Script, welche Eventlogs und Performance Counter lokal liest, erst mal auf Windows beschränkt sein. Auch der Zugriff auf Dateisysteme über "C:" u.a. wird auf Linux wohl nicht funktionieren. Aber viele Skripte kommunizieren ja mit anderen Diensten und wenn z.B. ein Linux-basiertes Provisioning nun per Remote PowerShell direkt auf dem Exchange Server eine Mailbox verwalten kann, dann eröffnet das schon neue Wege. Für den ein oder anderen Administrator kann aber auch der Wechsel von Shell-Skripten auf PowerShell durchaus interessant sein.

Wer nicht gleich eine Linux-VM starten will, kann auch schnell mal einen Raspberry dazu verwenden. Es muss aber mindestens ein Raspi 2,3 oder 4 sein. Ein RasPi 1 oder ein RasPi Zero haben keine kompatible CPU

Zwischenstand

Für mich ist klar, das PowerShell 6 und höher die bestehende PowerShell ablösen wird und ich gut daran tue, mit der PWSH zu arbeiten und so möglichst schnell Probleme und Inkompatibilitäten erkennen kann. Sicher wird es noch einige Zeit dauern, bis alle Produkte von Microsoft mit der PowerShell Core arbeiten. Betroffen sind sicher Exchange, welches noch auf diverse "alte" Komponenten zurückgreift. Zum Glück können beide Plattformen nebeneinander betrieben werden.

Allerdings gibt es schon noch Funktionen, die nun nicht mehr zur Verfügung stehen. WMI und das dazugehörige Commandlet "Get-WMIObject" ist z.B. nicht mehr erreichbar.

Weitere Links