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 |
|
|
Ausgabe von |
"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 |
|
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:
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.
- PowerShell By Microsoft
https://hub.docker.com/_/microsoft-powershell
docker pull mcr.microsoft.com/powershell - What's New in PowerShell Core 6.
https://docs.microsoft.com/de-de/powershell/scripting/whats-new/what-s-new-in-powershell-core-60?view=powershell-6 - Raspberry Pi PowerShell Core
https://developer-blog.net/raspberry-pi-powershell-core/ - What's New in PowerShell 7.0
https://docs.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-70
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
- Installing various versions of
PowerShell
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell?view=powershell-6#powershell-core - Installing PowerShell Core on Linux
https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-core-on-linux - Running PowerShell on Raspberry Pi 2
https://blogs.technet.microsoft.com/stefan_stranger/2017/12/28/running-powershell-core-on-raspberry-pi-2/
Inklusive Universal Dashboard - Running PowerShell Core 6 on a Raspberry-Pi
https://GitHub.com/PowerShell/PowerShell/blob/master/docs/installation/linux.md#installation-1 - PowerShell-IoT
https://GitHub.com/PowerShell/PowerShell-IoT
A PowerShell module for interacting with hardware sensors and devices using common protocols: GPIO, I2C & SPI.
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
- General Availability of PowerShell Core
6.2
https://devblogs.microsoft.com/powershell/general-availability-of-powershell-core-6-2/ - Difference between PowerShell and
PowerShell Core
https://www.thewindowsclub.com/difference-powershell-powershell-core - Was ist PowerShell Core?
https://www.zueschen.eu/was-ist-powershell-core/ - Installing PowerShell Core in Server
Core
http://www.maxtblog.com/2018/01/installing-powershell-core-in-server-core/ - PowerShell Core is GA, but not not ready
for Office 365
https://www.enowsoftware.com/solutions-engine/powershell-core-is-ga-but-not-ready-for-office-365 - Connecting to Exchange Online with
remote PowerShell from a MAC
https://www.cgoosen.com/2017/03/connecting-to-exchange-online-with-remote-powershell-from-a-mac/ - PowerShell Core – Connecting to O365
Exchange Online
https://audministrator.wordpress.com/2018/07/03/powershell-core-connecting-to-o365-exchange-online/ - Azure AD PowerShell module with support
for PowerShell Core
https://www.michev.info/Blog/Post/2339/azure-ad-powershell-module-with-support-for-powershell-core - How to use the AzureAD module in
PowerShell Core
https://blogs.endjin.com/2019/05/how-to-use-the-azuread-module-in-powershell-core/ - Windows Forms - working in PowerShell 7
Preview2
https://tfl09.blogspot.com/2019/07/windows-forms-working-in-powershell-7.html - 5 Things to Know About PowerShell Core
on Windows
https://www.petri.com/5-things-to-know-about-powershell-core-on-windows-2