BillionPhotos.com - stock.adobe.
Ist es an der Zeit, von PowerShell 5.1 zu 7 zu wechseln?
Die meisten Administratoren schätzen Veränderungen nicht besonders. Doch die Leistungsverbesserungen und neuen Funktionen für PowerShell 7 sind einen zweiten Blick wert.
Immer mehr Unternehmen setzen auf Cloud-Dienste und Linux-Server. Microsoft hat auf diese Entwicklung reagiert und PowerShell so angepasst, dass es als Verwaltungs-Tool über die Grenzen der Windows-Umgebung hinaus dienen kann.
Windows Server und das zugehörige Desktop-Betriebssystem sind zwar für viele Unternehmen immer noch die Norm, aber nicht mehr so dominant wie früher. Cloud- und Hybrid-Ökosysteme wachsen in vielen Unternehmen.
Diese Änderungen im Layer- und Aufgabenmanagement haben Administratoren auf neue Pfade zur Verwaltung der Infrastruktur geführt. Das Team hinter PowerShell hat die Funktionen des Tools erweitert, um diese neuen Herausforderungen zu bewältigen. Administratoren jedoch oft nur ungern bewährte Arbeitsweisen umstellen, weil sie ein neues Tool eingeführt haben. Ob sich der Wechsel zu einer neueren PowerShell-Version wirklich lohnt erklären wir in diesen Artikel.
Warum zu PowerShell 7 wechseln?
PowerShell 7 verzichtet nicht auf lokale Bereitstellungen, bietet jedoch eine verbesserte Unterstützung für moderne Alternativen. Ein wichtiges Update, die Pipeline-Parallelisierung, ist Teil der stabilen Version. Das Cmdlet ForEach-Object -Parallel kann für jedes über eine Pipe geleitete Eingabeobjekt mehrere Skripte gleichzeitig ausführen. Die Funktion unterstützt auch die Rückgabe von Jobobjekten statt Konsolenschreibvorgängen.
In früheren Versionen wurden diese Prozesse sequenziell ausgeführt, was die Leistung negativ beeinträchtigte. Das Konzept lässt sich mit dem Prozess zum Laden einer Webseite vergleichen: CSS und JavaScript werden Zeile für Zeile ausgeführt, bis die gesamte Seite generiert ist. Das kostet Zeit. Die Pipeline-Parallelisierung ermöglicht das zeitgleiche Ausführen mehrerer Threads, um diese Art von Leistungsproblem zu lösen.
Ein sequenzielles Cmdlet mit fünf Aufgaben, die jeweils eine Sekunde dauern, dauert fünf Sekunden. Würde man sie alle zeitgleich durchführen, dauert das hingegen nur eine Sekunde. Obgleich die Ausführungsreihenfolge nicht garantiert ist, kann das Skript drosseln, wie viele Skripte gleichzeitig ausgeführt werden.
Was ist noch in PowerShell 7 enthalten?
- neue Operatoren für Pipelineketten, Nullbedingungen und Ternär;
- einfachere Fehlersuche durch dynamische Ansichten;
- Unterstützung des Modulimports dank einer neuen Kompatibilitätsschicht; und
- direkter Aufruf von DSC-Ressourcen (Desired State Configuration).
PowerShell 7 bringt weitere Leistungsverbesserungen. Ein eingebautes SSH-Remoting erstellt einen PowerShell-Host-Prozess auf dem angegebenen Computer als Subsystem, das als Sprungbrett für ein allgemeines Hosting-Modell dargestellt wird, das ähnlich funktionieren soll Windows PowerShell 5.1 mit der Windows-Remoteverwaltung 2.0-Funktion. Umgebungen mit einer Mischung aus Windows-, Linux- und MacOS-Betriebssystemen profitieren von dieser zusätzlichen Kontrolle.
Schließlich unterstützt PowerShell 7 Docker-Container. Administratoren können Bilder herunterladen und Befehle in zugehörigen Containern ohne lokale Administratorrechte oder den Befehl sudo ausführen.
Hinweise zur Betriebssystemkompatibilität
PowerShell 7 läuft auf Windows 8.1, Windows 10 und deb folgenden Windows-Server-Versionen: 2012 (R2 enthalten), 2016 und 2019. Von Apple wird macOS 10.13 High Sierra oder höher unterstützt. PowerShell 7 unterstützt außerdem noch die folgenden Systeme und Plattformen:
- Red Hat Enterprise-Linux (RHEL);
- Fedora 30 oder höher;
- Debian 9 (einschließlich ARM32/64);
- Ubuntu 16.04 LTS oder höher (einschließlich ARM32/64); und
- Alpine Linux 3.8 oder höher (einschließlich ARM64).
Microsoft ist bestrebt, x64-Architekturen einzuschließen. Mitglieder der PowerShell-Community haben Arch- und Kali-Linux-Pakete erstellt, um den Support auf diese Systeme auszudehnen – wenn auch nicht offiziell. Diese Distributionen unterstützen x86-64-Architekturen.
So migrieren Sie zu PowerShell 7
Das PowerShell-Team hat die neue Open-Source-Version von PowerShell so erstellt, dass sie zusammen mit Windows PowerShell 5.1 ausgeführt werden kann, solange Administratoren sie in verschiedenen Verzeichnissen installieren. Sie installieren die neueste PowerShell 7-Version jedoch standardmäßig als direktes Upgrade, das frühere Instanzen der Open-Source-PowerShell im System ersetzt.
Die Installationsorte von PowerShell 7 sind:
- %Programmdateien%\PowerShell\7.
- Der Ordner %programfiles%\PowerShell\7 wird zu $env:PATH hinzugefügt.
Die Pfadposition trennt PowerShell 7 von anderen Versionen auf Ihrem System. Benutzer ohne Administratorrechte oder diejenigen, die frühere Versionen behalten möchten, sollten das Tool mit dem ZIP-Paket installieren.
Die ausführbare Datei heißt inzwischen pwsh.exe und nicht mehr, wie noch bei PowerShell 5.1 powershell.exe.
Speicherorte für PowerShell-Module
Module erweitern die Fähigkeiten von PowerShell, indem sie neue Befehle hinzufügen. Diese Module sind an verschiedenen Orten innerhalb des Systems gespeichert. Die Variable $Env:PSModulePath enthält die Speicherorte der Modulordner. PowerShell überprüft diese Speicherorte automatisch, wenn der Benutzer versucht, ein Modul zu importieren. Die neueste Version von PowerShell priorisiert das automatische Laden von Modulen. Es gibt neue Speicherorte für PowerShell-Module, den Bereich AllUsers und den Bereich CurrentUser. PowerShell 7 lädt sowohl Core- als auch Desktop-Module ohne Probleme.
PowerShell 5.1-Module sind aufwärtskompatibel mit PowerShell 7. Dazu gehören Azure PowerShell und Active Directory. Microsoft hat Schritte unternommen, um die Migration von PowerShell 5.1 zu vereinfachen, wenn Nutzer auf ein inkompatibles Modul angewiesen sind. Ein UseWindowsPowerShell-Switch in im Import-Modul erlaubt Nutzern zu prüfen, ob Module zusammenpassen. PowerShell 7.1 hat Schutzmaßnahmen hinzugefügt, um Clobbering in den folgenden Kernmodulen zu verhindern:
- PowerShell.ConsoleHost
- PowerShell.Diagnostics
- PowerShell.Host
- PowerShell.Verwaltung
- PowerShell.Sicherheit
- PowerShell.Utility
- WSMan.Management
Änderungen bei der Profilverwaltung mit PowerShell 7
Profile sind Skripte, die zu Beginn einer PowerShell-Sitzung ausgeführt werden, um das Ökosystem über Aliasse, Befehle, Laufwerke, Funktionen, Module und Variablen anzupassen.
Bei älteren Versionen von PowerShell müssen Benutzer Einstellungen für jede Sitzung neu vornehmen, was zeitaufwändig und mühsam ist. Durch die Automatisierung mit Skripten, können Administratoren schneller mit der Arbeit beginnen. Profile sorgen auch dafür, dass wichtige Konfigurationen nicht übersehen werden.
Die Dateinamen – und Speicherorte – haben sich seit Windows PowerShell 5.1 geändert. Profile befinden sich jetzt unter $HOME\Documents\PowerShell. Verweise auf \WindowsPowerShell wurden entfernt; Die meisten Speicherorte sind nun im \PowerShell-Zweig des Dateisystems unter \Programme und \Benutzer zu finden. Die Namen der Profile lauten entsprechend:
- AllUsersAllHosts;
- AllUsersCurrentHost;
- CurrentUserAllHosts; und
- CurrentUserCurrentHost.
Remoting, Gruppenrichtlinien und Protokolle
PowerShell 5.1 verwendet das Web-Services-Management-Protokoll (WS-MAN) für die Verbindung und den Datentransport. PowerShell 7 greift auf denselben Endpunkt zu, wenn die Windows-Remoteverwaltung aktiviert ist. Sie können PowerShell 7 jedoch auch einen eigenen Endpunkt nutzen lassen, indem Sie das Cmdlet Enable-PSRemoting verwenden, um eine neue Konfiguration hinzuzufügen.
Auf der SSH-Seite haben Benutzer, deren Betriebssysteme nicht mit Windows-Komponenten kompatibel sind, einige Optionen, um die neuen Parameter New-PSSession, Enter-PSSession und Invoke-Command, um Remoting zu nutzen. Sie können Zeichenfolgen, Computer und Benutzernamen angeben. Der Parameter KeyFilePath verarbeitet die Schlüsselauthentifizierung.
Wenn Sie mehrere Server in einer Unternehmensumgebung ausführen, funktionieren die Gruppenrichtlinieneinstellungen ähnlich wie Profile. Sie definieren Werte, die während der gesamten Bereitstellung konsequent durchgesetzt werden. Administratoren können Folgendes anpassen:
- Konsolensitzungskonfigurationen;
- Aktivieren der Modulprotokollierung;
- Aktivieren der Skriptblockprotokollierung;
- Skriptausführungsrichtlinien;
- PowerShell-Transkriptionsaktionen; und
- Delegation von Standardquellpfaden für Update-Hilfe.
PowerShell 7 enthält Gruppenrichtlinienvorlagen, die einen Großteil der Arbeit, die in früheren Versionen erforderlich war, überflüssig machen. Diese Dateien verwenden die Erweiterungen .admx und .adml. Um zentrale administrative Vorlagen zu installieren, können Teams das Skript InstallPSCorePolicyDefinitions.ps1 ausführen.
Gewaltenteilung ist ein wichtiges Thema in PowerShell 7. Dies gilt auch für die Ereignisprotokolle. Windows PowerShell 5.1 und PowerShell 7 protokollieren Ereignisse in unterschiedlichen Dateien, um Missverständnisse zu vermeiden und Referenzen zu erleichtern. Der Befehl Get-WinEvent -ListLog *PowerShell* ruft eine Liste von Protokollen ab.
Skripte mit Visual Studio Code erstellen
Teams, die Windows PowerShell 5.1 auf Nicht-Windows-Systemen ausführen, verwenden Visual Studio Code als Quellcode-Editor. PowerShell 7 erweitert die Unterstützung für Visual Studio Code sowohl auf macOS als auch auf Linux. PowerShell in Visual Studio Code erfordert die Installation einer Erweiterung. Sie finden eine Anleitung auf der Seite von Visual Studio.
Das Skripterstellungs-Tool für Administratoren ist die Umgebung von PowerShell zum Schreiben von Skripten, die in Visual Studio Code verfügbar ist, jedoch nur für Windows PowerShell. Sie erweitert das Editor-Layout und fügt zusätzliche Funktionen hinzu.