Migrieren von Windows PowerShell 5.1 zu PowerShell 7
PowerShell 7 wurde für Cloud-, lokale und Hybridumgebungen entwickelt und bietet Verbesserungen sowie neue Features.
- Parallele Installation und Ausführung mit Windows PowerShell
- Verbesserte Kompatibilität mit vorhandenen Windows PowerShell-Modulen
- Neue Sprachfeatures wie ternäre Operatoren und
ForEach-Object -Parallel
- Verbesserte Leistung
- SSH-basiertes Remoting
- Plattformübergreifende Interoperabilität
- Unterstützung für Docker-Container
PowerShell 7 funktioniert parallel mit Windows PowerShell, sodass Sie Editionen vor der Bereitstellung problemlos testen und vergleichen können. Die Migration erfolgt einfach, schnell und betriebssicher
Die folgenden Windows-Betriebssysteme unterstützen PowerShell 7:
- Windows 10, und 11
- Windows Server 2016, 2019 und 2022
PowerShell 7 lässt sich auch unter macOS und mehreren Linux-Distributionen ausführen. Eine Liste der unterstützten Betriebssysteme und Informationen zum Supportlebenszyklus finden Sie unter PowerShell-Supportlebenszyklus.
Installieren von PowerShell 7
Aus Gründen der Flexibilität und zur Unterstützung der Anforderungen von IT- und DevOps-Mitarbeitern sowie Entwicklern stehen mehrere Optionen zur Installation von PowerShell 7 zur Verfügung. In den meisten Fällen können die Installationsoptionen auf die folgenden reduziert werden:
Hinweis
Das MSI-Paket kann mit Verwaltungsprodukten wie Microsoft Configuration Manager bereitgestellt und aktualisiert werden. Laden Sie die Pakete von der GitHub-Seite „Releases“ herunter.
Zum Bereitstellen des MSI-Pakets sind Administratorberechtigungen erforderlich. Das ZIP-Paket kann von beliebigen Benutzern bereitgestellt werden. Das ZIP-Paket ist die einfachste Möglichkeit, PowerShell 7 zum Testen zu installieren, bevor eine vollständige Installation erfolgt.
Sie können PowerShell 7 auch über den Windows Store oder winget
installieren. Weitere Informationen zu beiden Methoden finden Sie in den ausführlichen Anweisungen unter Installieren von PowerShell unter Windows.
Parallele Nutzung von PowerShell 7 mit Windows PowerShell 5.1
PowerShell 7 ist für die parallele Nutzung mit Windows PowerShell 5.1 konzipiert. Die folgenden Features stellen sicher, dass Ihre Investition in PowerShell geschützt und die Migration zu PowerShell 7 einfach ist.
- Trennung von Installationspfad und Namen der ausführbaren Datei
- Trennung von PSModulePath
- Getrennte Profile für jede Version
- Verbesserte Modulkompatibilität
- Neue Remoting-Endpunkte
- Unterstützung von Gruppenrichtlinien
- Getrennte Ereignisprotokolle
Unterschiede in .NET-Versionen
PowerShell 7.2 basiert auf .NET 6.0. Windows PowerShell 5.1 basiert auf .NET Framework 4.x. Die Unterschiede zwischen den .NET-Versionen können sich auf das Verhalten Ihrer Skripts auswirken, insbesondere, wenn Sie die .NET-Methode direkt aufrufen. Weitere Informationen finden Sie unter Unterschiede zwischen Windows PowerShell 5.1 und PowerShell 7.x.
Trennung von Installationspfad und Namen der ausführbaren Datei
PowerShell 7 wird in ein neues Verzeichnis installiert und ermöglicht die parallele Ausführung mit Windows PowerShell 5.1.
Installationsspeicherorte nach Version:
- Windows PowerShell 5.1:
$env:WINDIR\System32\WindowsPowerShell\v1.0
- PowerShell 6.x:
$env:ProgramFiles\PowerShell\6
- PowerShell 7:
$env:ProgramFiles\PowerShell\7
Der neue Speicherort wird Ihrer Umgebungsvariablen PATH hinzugefügt, sodass Sie sowohl Windows PowerShell 5.1 als auch PowerShell 7 ausführen können. Wenn Sie von PowerShell 6.x zu PowerShell 7 migrieren, wird PowerShell 6 entfernt und PATH ersetzt.
In Windows PowerShell heißt die ausführbare Datei powershell.exe
. Ab Version 6 heißt die ausführbare Datei pwsh.exe
. Der neue Name vereinfacht die parallele Ausführung beider Versionen.
Trennung von PSModulePath
Standardmäßig werden Module in Windows PowerShell und PowerShell 7 an verschiedenen Speicherorten gespeichert. PowerShell 7 kombiniert diese Speicherorte in der Umgebungsvariablen $Env:PSModulePath
. Wenn Sie ein Modul nach Name importieren, prüft PowerShell den von $Env:PSModulePath
angegebenen Speicherort. Dies ermöglicht PowerShell 7 das Laden von Core- und Desktop-Modulen.
Installationsumfang | Windows PowerShell 5.1 | PowerShell 7.0 |
---|---|---|
PowerShell-Module | $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules |
$env:ProgramFiles\PowerShell\7\Modules |
Vom Benutzer installierter Geltungsbereich AllUsers |
$env:ProgramFiles\WindowsPowerShell\Modules |
$env:ProgramFiles\PowerShell\Modules |
Vom Benutzer installierter Geltungsbereich CurrentUser |
$HOME\Documents\WindowsPowerShell\Modules |
$HOME\Documents\PowerShell\Modules |
In den folgenden Beispielen sind die Standardwerte von $Env:PSModulePath
für jede Version angegeben.
Windows PowerShell 5.1:
$Env:PSModulePath -split (';')
C:\Users\<user>\Documents\WindowsPowerShell\Modules C:\Program Files\WindowsPowerShell\Modules C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
PowerShell 7:
$Env:PSModulePath -split (';')
C:\Users\<user>\Documents\PowerShell\Modules C:\Program Files\PowerShell\Modules C:\Program Files\PowerShell\7\Modules C:\Program Files\WindowsPowerShell\Modules C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
Beachten Sie, dass PowerShell 7 die Windows PowerShell-Pfade und die PowerShell 7-Pfade enthält, um das automatische Laden von Modulen zu ermöglichen.
Hinweis
Zusätzliche Pfade sind möglicherweise vorhanden, wenn Sie die Umgebungsvariable PSModulePath geändert oder benutzerdefinierte Module oder Anwendungen installiert haben.
Weitere Informationen finden Sie unter about_PSModulePath.
Weitere Informationen zu Modulen finden Sie unter about_Modules.
Getrennte Profile
Ein PowerShell-Profil ist ein Skript, das beim Start von PowerShell ausgeführt wird. Dieses Skript passt Ihre Umgebung durch Hinzufügen von Befehlen, Aliasen, Funktionen, Variablen, Modulen und PowerShell-Laufwerken an. Das Profilskript stellt diese Anpassungen in jeder Sitzung zur Verfügung, ohne dass sie manuell neu erstellt werden müssen.
Der Pfad zum Speicherort des Profils hat sich in PowerShell 7 geändert.
- In Windows PowerShell 5.1 lautet der Speicherort des Profils
$HOME\Documents\WindowsPowerShell
. - In PowerShell 7 lautet der Speicherort des Profils
$HOME\Documents\PowerShell
.
Die Profildateinamen wurden ebenfalls geändert:
$PROFILE | Select-Object *Host* | Format-List
AllUsersAllHosts : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\<user>\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Weitere Informationen finden Sie unter about_Profiles.
Kompatibilität von PowerShell 7 mit Windows PowerShell 5.1-Modulen
Die meisten Module, die Sie in Windows PowerShell 5.1 verwenden, funktionieren bereits mit PowerShell 7, einschließlich Azure PowerShell und Active Directory. Wir arbeiten weiterhin mit anderen Teams zusammen, um native PowerShell 7-Unterstützung für weitere Module wie Microsoft Graph, Office 365 und andere hinzuzufügen. Die aktuelle Liste der unterstützten Module finden Sie unter Kompatibilität von PowerShell 7-Modulen.
Hinweis
Unter Windows haben wir außerdem den Schalter UseWindowsPowerShell zu Import-Module
hinzugefügt, um Benutzern mit inkompatiblen Modulen den Umstieg auf PowerShell 7 zu erleichtern. Weitere Informationen zu dieser Funktionalität finden Sie unter about_Windows_PowerShell_Compatibility.
PowerShell-Remoting
PowerShell-Remoting ermöglicht Ihnen, jeden Windows PowerShell-Befehl auf einem oder mehreren Remotecomputern ausführen. Sie können dauerhafte Verbindungen herstellen, interaktive Sitzungen starten und Skripts auf Remotecomputern ausführen.
WS-Management-Remoting
Bis Windows PowerShell 5.1 wird für die Verbindungsaushandlung und den Datentransport das WSMAN-Protokoll (WS-Management) verwendet. WinRM (Windows Remote Management) verwendet das WSMAN-Protokoll. Wenn WinRM aktiviert wurde, verwendet PowerShell 7 für Remoteverbindungen den vorhandenen Windows PowerShell 5.1-Endpunkt namens Microsoft.PowerShell
. Um PowerShell 7 so zu aktualisieren, dass es seinen eigenen Endpunkt einbezieht, führen Sie das Cmdlet Enable-PSRemoting
aus. Informationen zum Herstellen einer Verbindung mit bestimmten Endpunkten finden Sie unter WS-Management-Remoting in PowerShell.
Um Windows PowerShell-Remoting zu verwenden, muss der Remotecomputer für die Remoteverwaltung konfiguriert sein. Weitere Informationen und Anweisungen hierzu finden Sie unter Informationen zu Remoteanforderungen.
Weitere Informationen zum Arbeiten mit Remoteverbindungen finden Sie unter About Remote (Informationen zu Remotebefehlen).
SSH-basiertes Remoting
SSH-basiertes Remoting wurde in PowerShell 6.x hinzugefügt, um andere Betriebssysteme zu unterstützen, die keine nativen Windows-Komponenten wie WinRM verwenden können. SSH-Remoting erstellt einen PowerShell-Hostprozess als SSH-Subsystem auf dem Zielcomputer. Einzelheiten und Beispiele zum Einrichten von SSH-basiertem Remoting unter Windows und Linux finden Sie unter: PowerShell-Remoting über SSH.
Hinweis
Der PowerShell-Katalog (PSGallery) enthält ein Modul und ein Cmdlet, mit dem SSH-basiertes Remoting automatisch konfiguriert kann. Laden Sie das Modul Microsoft.PowerShell.RemotingTools
aus PSGallery herunter, installieren Sie es, und führen Sie das Cmdlet Enable-SSH
aus.
Die Cmdlets New-PSSession
, Enter-PSSession
und Invoke-Command
weisen neue Parametersätze zur Unterstützung von SSH-Verbindungen auf.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Um eine Remotesitzung zu erstellen, geben Sie den Zielcomputer mit dem Parameter HostNamean, und fügen Sie mit UserName den Benutzernamen hinzu. Wenn Sie die Cmdlets interaktiv ausführen, werden Sie zur Kennworteingabe aufgefordert.
Enter-PSSession -HostName <Computer> -UserName <Username>
Wenn Sie den Parameter HostName verwenden, geben Sie alternativ die Informationen zum Benutzernamen gefolgt vom At-Zeichen (@
) und Computernamen an.
Enter-PSSession -HostName <Username>@<Computer>
Sie können die SSH-Schlüsselauthentifizierung auch mithilfe einer privaten Schlüsseldatei und des Parameters KeyFilePath einrichten. Weitere Informationen finden Sie unter OpenSSH-Schlüsselverwaltung.
Unterstützung von Gruppenrichtlinien
PowerShell enthält Gruppenrichtlinieneinstellungen, die Ihnen helfen, einheitliche Optionswerte für Server in einer Unternehmensumgebung festzulegen. Dies umfasst Folgendes:
- Konfiguration der Konsolensitzung: Legt einen Konfigurationsendpunkt fest, an dem PowerShell ausgeführt wird.
- Modulprotokollierung aktivieren: Legt die Eigenschaft LogPipelineExecutionDetails von Modulen fest.
- Protokollierung von PowerShell-Skriptblöcken: Aktiviert die ausführliche Protokollierung aller PowerShell-Skripts.
- Skriptausführung aktivieren: Legt die PowerShell-Ausführungsrichtlinie fest.
- PowerShell-Aufzeichnung aktivieren: ermöglicht die Erfassung der Ein- und Ausgabe von PowerShell-Befehlen in textbasierten Transkripten.
- Standardquellpfad für "Update-Help" festlegen: Legt die Quelle für die aktualisierbare Hilfe auf ein Verzeichnis und nicht auf das Internet fest.
Weitere Informationen finden Sie unter about_Group_Policy_Settings.
PowerShell 7 bietet Gruppenrichtlinienvorlagen und in $PSHOME
ein Installationsskript.
Gruppenrichtlinientools verwenden administrative Vorlagendateien (.admx
, .adml
), um Richtlinieneinstellungen auf der Benutzeroberfläche aufzufüllen. Dies ermöglicht Administratoren die Verwaltung registrierungsbasierter Richtlinieneinstellungen. Das Skript InstallPSCorePolicyDefinitions.ps1
installiert administrative PowerShell-Vorlagen auf dem lokalen Computer.
Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
Directory: C:\Program Files\PowerShell\7
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/27/2020 12:38 AM 15861 InstallPSCorePolicyDefinitions.ps1
-a--- 2/27/2020 12:28 AM 9675 PowerShellCoreExecutionPolicy.adml
-a--- 2/27/2020 12:28 AM 6201 PowerShellCoreExecutionPolicy.admx
Getrennte Ereignisprotokolle
Windows PowerShell und PowerShell 7 protokollieren Ereignisse in getrennten Ereignisprotokollen. Verwenden Sie den folgenden Befehl, um eine Liste der PowerShell-Protokolle abzurufen.
Get-WinEvent -ListLog *PowerShell*
Weitere Informationen finden Sie unter about_Logging_Windows.
Verbesserte Bearbeitungsumgebung in Visual Studio Code
Visual Studio Code (VS Code) mit der PowerShell-Erweiterung ist die unterstützte Skriptumgebung für PowerShell 7. Die Windows PowerShell Integrated Scripting Environment (ISE) unterstützt nur Windows PowerShell.
Die aktualisierte PowerShell-Erweiterung umfasst Folgendes:
- Neuen ISE-Kompatibilitätsmodus
- PSReadLine in der integrierten Konsole, einschließlich Syntaxhervorhebung, mehrzeilige Bearbeitung und Rückwärtssuche
- Stabilitäts- und Leistungsverbesserungen
- Neue CodeLens-Integration
- Verbesserte automatische Pfadvervollständigung
Um den Umstieg auf Visual Studio Code zu erleichtern, verwenden Sie in der Befehlspalette die Funktion ISE-Modus aktivieren. Über diese Option wird auf ein Layout im ISE-Stil umgestellt. Das Layout im ISE-Stil bietet Ihnen alle neuen Features und Funktionen von PowerShell in einer vertrauten Benutzerumgebung.
Um auf das neue ISE-Layout umzustellen, drücken Sie STRG+UMSCHALT+P, um die Befehlspalette zu öffnen. Geben Sie PowerShell
ein, und wählen Sie folgende Option aus: PowerShell: ISE-Modus aktivieren.
Um das Layout auf das Originallayout festzulegen, öffnen Sie die Befehlspalette, und wählen Sie folgende Option aus: PowerShell: ISE-Modus deaktivieren (Standard wiederherstellen).
Ausführliche Informationen zum Anpassen des Layouts von Visual Studio Code an ISE finden Sie unter Replizieren der ISE-Benutzeroberfläche in Visual Studio Code.
Hinweis
Es ist nicht geplant, die ISE mit neuen Features zu aktualisieren. In den neuesten Versionen von Windows 10 oder Windows Server 2019 und höher ist die ISE jetzt ein Feature, das von dem*der Benutzer*in deinstalliert werden kann. Es ist nicht geplant, die ISE dauerhaft zu entfernen. Das PowerShell-Team und seine Partner konzentrieren sich auf die Verbesserung der Skripterstellung in der PowerShell-Erweiterung für Visual Studio Code.
Nächste Schritte
Mit dem Wissen zur effektiven Migration jetzt PowerShell 7 installieren!