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 vor der Bereitstellung problemlos zwischen Editionen testen und vergleichen können. Die Migration ist einfach, schnell und sicher.
PowerShell 7 wird unter den folgenden Windows-Betriebssystemen unterstützt:
- Windows 10 und 11
- Windows Server 2016, 2019 und 2022
PowerShell 7 wird auch unter macOS und mehreren Linux-Distributionen ausgeführt. Eine Liste der unterstützten Betriebssysteme und Informationen zum Supportlebenszyklus finden Sie im PowerShell Support Lifecycle.
Installieren von PowerShell 7
Für Flexibilität und Unterstützung der Anforderungen von IT-, DevOps-Ingenieuren und Entwicklern stehen mehrere Optionen zur Installation von PowerShell 7 zur Verfügung. In den meisten Fällen können die Installationsoptionen auf die folgenden Methoden reduziert werden:
- PowerShell mithilfe des MSI-Pakets bereitstellen
- Bereitstellen von PowerShell mit dem ZIP-Paket
Anmerkung
Das MSI-Paket kann mit Verwaltungsprodukten wie Microsoft Configuration Managerbereitgestellt und aktualisiert werden. Laden Sie die Pakete von der GitHub-Seite „Releases“ herunter.
Für die Bereitstellung des MSI-Pakets ist Administratorberechtigung erforderlich. Das ZIP-Paket kann von jedem Benutzer bereitgestellt werden. Das ZIP-Paket ist die einfachste Möglichkeit, PowerShell 7 zum Testen zu installieren, bevor sie eine vollständige Installation durchführen.
Sie können PowerShell 7 auch über den Windows Store oder winget
installieren. Weitere Informationen zu diesen beiden Methoden finden Sie in den detaillierten Anweisungen in Installieren von PowerShell unter Windows.
Verwenden von PowerShell 7 parallel zu Windows PowerShell 5.1
PowerShell 7 ist für die Koexistenz mit Windows PowerShell 5.1 konzipiert. Die folgenden Features stellen sicher, dass Ihre Investition in PowerShell geschützt ist und Ihre 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
- Separate Ereignisprotokolle
Unterschiede in .NET-Versionen
PowerShell 7.4 basiert auf .NET 8.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 einem neuen Verzeichnis installiert und ermöglicht die parallele Ausführung mit Windows PowerShell 5.1.
Installationsorte nach Versionen
- 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 Ihrem 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 der Pfad ersetzt.
In Windows PowerShell heißt die PowerShell-Programmdatei powershell.exe
. In Version 6 und höher heißt die ausführbare Datei pwsh.exe
. Der neue Name erleichtert die Parallelausführung beider Versionen.
Trennung von PSModulePath
Standardmäßig speichern Windows PowerShell und PowerShell 7 Module an verschiedenen Speicherorten. 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. Dadurch kann PowerShell 7 sowohl Core- als auch Desktopmodule laden.
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 |
Die folgenden Beispiele zeigen die Standardwerte von $Env:PSModulePath
für jede Version.
Für 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 bereitzustellen.
Anmerkung
Möglicherweise sind weitere Pfade vorhanden, wenn Sie die PSModulePath-Umgebungsvariable 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 Starten von PowerShell ausgeführt wird. Dieses Skript passt Ihre Umgebung an, indem Befehle, Aliase, Funktionen, Variablen, Module und PowerShell-Laufwerke hinzugefügt werden. Das Profilskript stellt diese Anpassungen in jeder Sitzung zur Verfügung, ohne sie manuell neu erstellen zu müssen.
Der Pfad zum Speicherort des Profils wurde 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 haben sich 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.
PowerShell 7-Kompatibilität 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 PowerShell 7-Modulkompatibilität.
Anmerkung
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
Mit PowerShell-Remoting können Sie beliebige PowerShell-Befehle auf einem oder mehreren Remote-Computern ausführen. Sie können dauerhafte Verbindungen herstellen, interaktive Sitzungen starten und Skripts auf Remotecomputern ausführen.
WS-Management-Remoting
Windows PowerShell 5.1 und unten verwenden das WS-Management (WSMAN)-Protokoll für Verbindungsverhandlung und Datentransport. Die Windows-Remoteverwaltung (WinRM) 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 er einen eigenen Endpunkt enthält, 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 werden. 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.
Anmerkung
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 New-PSSession
, Enter-PSSession
und Invoke-Command
Cmdlets verfügen über neue Parametersätze zur Unterstützung von SSH-Verbindungen.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Um eine Remotesitzung zu erstellen, geben Sie den Zielcomputer mit dem parameter HostName an, und geben Sie den Benutzernamen mit UserNamean. Wenn Sie die Cmdlets interaktiv ausführen, werden Sie aufgefordert, ein Kennwort einzugeben.
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 mithilfe einer privaten Schlüsseldatei mit dem parameter KeyFilePath einrichten. Weitere Informationen finden Sie unter OpenSSH Key Management.
Unterstützung von Gruppenrichtlinien
PowerShell enthält Gruppenrichtlinieneinstellungen, mit denen Sie konsistente Optionswerte für Server in einer Unternehmensumgebung definieren können. Zu diesen Einstellungen gehören:
- Konsolensitzungskonfiguration: Legt einen Konfigurationsendpunkt fest, in dem PowerShell ausgeführt wird.
- Modulprotokollierung aktivieren: Legt die Eigenschaft LogPipelineExecutionDetails von Modulen fest.
- Aktivieren der PowerShell-Skriptblockprotokollierung: Ermöglicht die detaillierte Protokollierung aller PowerShell-Skripte.
- Skriptausführung aktivieren: Legt die PowerShell-Ausführungsrichtlinie fest.
- Aktivieren der PowerShell-Transkription: Ermöglicht das Erfassen von Eingaben und Ausgaben von PowerShell-Befehlen in textbasierte Transkriptionen.
- Legen Sie den Standardquellpfad für "Update-Help" fest: Legt die Quelle für 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. Auf diese Weise können Administratoren registrierungsbasierte Richtlinieneinstellungen verwalten. 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
Separate Ereignisprotokolle
Windows PowerShell und PowerShell 7 protokollieren Ereignisse in separaten 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 Bearbeitungserfahrung mit Visual Studio Code
Visual Studio Code (VSCode) 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:
- Neuer 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 Merkmale und Möglichkeiten von PowerShell in einer vertrauten Benutzeroberfläche.
Um zum neuen ISE-Layout zu wechseln, drücken Sie STRG+Umschalt+P, um die Befehlspalette zu öffnen, geben PowerShell
ein und wählen PowerShell: ISE-Modus aktivieren.
Um das Layout auf das ursprüngliche Layout festzulegen, öffnen Sie die Befehlspalette, wählen Sie PowerShell: ISE-Modus deaktivieren (auf Standardeinstellungen zurücksetzen).
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.
Anmerkung
Es gibt keine Pläne, die ISE mit neuen Features zu aktualisieren. In den neuesten Versionen von Windows 10 oder Windows Server 2019 und höher ist das ISE jetzt ein benutzerdeinstallierbares Feature. Es gibt keine Pläne, den ISE dauerhaft zu entfernen. Das PowerShell-Team und seine Partner konzentrieren sich auf die Verbesserung der Skripterfahrung in der PowerShell-Erweiterung für Visual Studio Code.
Nächste Schritte
Mit dem Wissen zur effektiven Migration jetzt PowerShell 7 installieren!