Migreren van Windows PowerShell 5.1 naar PowerShell 7
PowerShell 7 is ontworpen voor cloud-, on-premises en hybride omgevingen en bevat verbeteringen en nieuwe functies.
- Wordt naast Windows PowerShell geïnstalleerd en uitgevoerd
- Verbeterde compatibiliteit met bestaande Windows PowerShell-modules
- Nieuwe taalfuncties, zoals ternaire operators en
ForEach-Object -Parallel
- Verbeterde prestaties
- SSH-gebaseerd op afstand bedienen
- Platformoverschrijdende interoperabiliteit
- Ondersteuning voor Docker-containers
PowerShell 7 werkt naast Windows PowerShell, zodat u eenvoudig kunt testen en vergelijken tussen edities vóór de implementatie. Migratie is eenvoudig, snel en veilig.
PowerShell 7 wordt ondersteund op de volgende Windows-besturingssystemen:
- Windows 10 en 11
- Windows Server 2016, 2019 en 2022
PowerShell 7 wordt ook uitgevoerd op macOS en verschillende Linux-distributies. Zie de powerShell-ondersteuningslevenscyclusvoor een lijst met ondersteunde besturingssystemen en informatie over de levenscyclus van de ondersteuning.
PowerShell 7 installeren
Voor flexibiliteit en ondersteuning van de behoeften van IT-, DevOps-technici en ontwikkelaars zijn er verschillende opties beschikbaar om PowerShell 7 te installeren. In de meeste gevallen kunnen de installatieopties worden beperkt tot de volgende methoden:
- PowerShell implementeren met het MSI-pakket
- PowerShell implementeren met behulp van het ZIP-pakket
Notitie
Het MSI-pakket kan worden geïmplementeerd en bijgewerkt met beheerproducten zoals Microsoft Configuration Manager-. Download de pakketten van de GitHub Release-pagina.
Voor het implementeren van het MSI-pakket is beheerdersmachtiging vereist. Het ZIP-pakket kan door elke gebruiker worden geïmplementeerd. Het ZIP-pakket is de eenvoudigste manier om PowerShell 7 te installeren voordat u een volledige installatie uitvoert.
U kunt PowerShell 7 ook installeren via de Windows Store of winget
. Zie de gedetailleerde instructies in PowerShell installeren in Windowsvoor meer informatie over beide methoden.
PowerShell 7 naast Windows PowerShell 5.1 gebruiken
PowerShell 7 is ontworpen om naast Windows PowerShell 5.1 te bestaan. De volgende functies zorgen ervoor dat uw investering in PowerShell is beveiligd en uw migratie naar PowerShell 7 eenvoudig is.
- Afzonderlijke installatiepad en uitvoerbare naam
- Afzonderlijk PSModulePath
- Afzonderlijke profielen voor elke versie
- Verbeterde modulecompatibiliteit
- Nieuwe externe eindpunten
- Ondersteuning voor groepsbeleid
- Afzonderlijke gebeurtenislogboeken
Verschillen in .NET-versies
PowerShell 7.4 is gebouwd op .NET 8.0. Windows PowerShell 5.1 is gebouwd op .NET Framework 4.x. De verschillen tussen de .NET-versies kunnen van invloed zijn op het gedrag van uw scripts, met name als u de .NET-methode rechtstreeks aanroept. Voor meer informatie, Verschillen tussen Windows PowerShell 5.1 en PowerShell 7.x.
Afzonderlijke installatiepad en uitvoerbare naam
PowerShell 7 wordt geïnstalleerd in een nieuwe map, waardoor uitvoering naast elkaar kan worden uitgevoerd met Windows PowerShell 5.1.
Installatielocaties per versie
- Windows PowerShell 5.1:
$Env:windir\System32\WindowsPowerShell\v1.0
- PowerShell 6.x:
$Env:ProgramFiles\PowerShell\6
- PowerShell 7:
$Env:ProgramFiles\PowerShell\7
De nieuwe locatie wordt toegevoegd aan uw PATH, zodat u zowel Windows PowerShell 5.1 als PowerShell 7 kunt uitvoeren. Als u migreert van PowerShell 6.x naar PowerShell 7, wordt PowerShell 6 verwijderd en wordt het pad vervangen.
In Windows PowerShell heeft het uitvoerbare PowerShell-bestand de naam powershell.exe
. In versie 6 en hoger heeft het uitvoerbare bestand de naam pwsh.exe
. De nieuwe naam maakt het eenvoudig om de uitvoering van beide versies naast elkaar te ondersteunen.
Een afzonderlijk PSModulePath
Standaard slaan Windows PowerShell- en PowerShell 7-modules op verschillende locaties op. PowerShell 7 combineert deze locaties in de $Env:PSModulePath
omgevingsvariabele. Wanneer u een module op naam importeert, controleert PowerShell de locatie die is opgegeven door $Env:PSModulePath
. Hierdoor kan PowerShell 7 zowel Core- als Desktop-modules laden.
Scope installeren | Windows PowerShell 5.1 | PowerShell 7.0 |
---|---|---|
PowerShell-modulen | $Env:windir\system32\WindowsPowerShell\v1.0\Modules |
$Env:ProgramFiles\PowerShell\7\Modules |
Door gebruiker geïnstalleerd Bereik 'AllUsers' |
$Env:ProgramFiles\WindowsPowerShell\Modules |
$Env:ProgramFiles\PowerShell\Modules |
Gebruiker geïnstalleerd CurrentUser-bereik |
$HOME\Documents\WindowsPowerShell\Modules |
$HOME\Documents\PowerShell\Modules |
In de volgende voorbeelden ziet u de standaardwaarden van $Env:PSModulePath
voor elke versie.
Voor 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
Voor 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
U ziet dat PowerShell 7 de Windows PowerShell-paden en de PowerShell 7-paden bevat voor het automatisch laden van modules.
Notitie
Er kunnen extra paden bestaan als u de omgevingsvariabele PSModulePath hebt gewijzigd of aangepaste modules of toepassingen hebt geïnstalleerd.
Zie about_PSModulePathvoor meer informatie.
Zie about_Modulesvoor meer informatie over modules.
Afzonderlijke profielen
Een PowerShell-profiel is een script dat wordt uitgevoerd wanneer PowerShell wordt gestart. Met dit script past u uw omgeving aan door opdrachten, aliassen, functies, variabelen, modules en PowerShell-stations toe te voegen. Het profielscript maakt deze aanpassingen beschikbaar in elke sessie zonder ze handmatig opnieuw te hoeven maken.
Het pad naar de locatie van het profiel is gewijzigd in PowerShell 7.
- In Windows PowerShell 5.1 is de locatie van het profiel
$HOME\Documents\WindowsPowerShell
. - In PowerShell 7 is de locatie van het profiel
$HOME\Documents\PowerShell
.
De profielbestandsnamen zijn ook gewijzigd:
$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
Voor meer informatie about_Profiles.
Compatibiliteit met PowerShell 7 met Windows PowerShell 5.1-modules
De meeste modules die u in Windows PowerShell 5.1 gebruikt, werken al met PowerShell 7, waaronder Azure PowerShell en Active Directory. We blijven samenwerken met andere teams om systeemeigen PowerShell 7-ondersteuning toe te voegen voor meer modules, waaronder Microsoft Graph, Office 365 en anderen. Zie Compatibiliteit van PowerShell 7-modulesvoor de huidige lijst met ondersteunde modules.
Notitie
In Windows hebben we ook de schakelaar UseWindowsPowerShell toegevoegd aan Import-Module
om de overstap naar PowerShell 7 te vereenvoudigen voor degenen die incompatibele modules gebruiken. Zie about_Windows_PowerShell_Compatibilityvoor meer informatie over deze functionaliteit.
Externe communicatie van PowerShell
Met externe toegang via PowerShell kunt u elke PowerShell-opdracht uitvoeren op een of meer externe computers. U kunt permanente verbindingen tot stand brengen, interactieve sessies starten en scripts uitvoeren op externe computers.
WS-Management op afstand
Windows PowerShell 5.1 en hieronder gebruiken het WSMAN-protocol (WS-Management) voor verbindingsonderhandeling en gegevenstransport. Windows Remote Management (WinRM) maakt gebruik van het WSMAN-protocol. Als WinRM is ingeschakeld, gebruikt PowerShell 7 het bestaande Windows PowerShell 5.1-eindpunt met de naam Microsoft.PowerShell
voor externe verbindingen. Als u PowerShell 7 wilt bijwerken om een eigen eindpunt op te nemen, voert u de cmdlet Enable-PSRemoting
uit. Zie WS-Management Externe communicatie in PowerShell voor informatie over het maken van verbinding met specifieke eindpunten
Als u externe communicatie met Windows PowerShell wilt gebruiken, moet de externe computer worden geconfigureerd voor extern beheer. Zie Over externe vereistenvoor meer informatie, inclusief instructies.
Voor meer informatie over het werken met externe verbindingen, zie Over externe
Extern beheer op basis van SSH
SSH-gebaseerde communicatie is toegevoegd in PowerShell 6.x ter ondersteuning van andere besturingssystemen die geen Windows-native onderdelen kunnen gebruiken, zoals WinRM. Met SSH-verificatie op afstand wordt een PowerShell-hostproces op de doelcomputer gemaakt als een SSH-subsysteem. Zie voor meer informatie en voorbeelden over het instellen van externe toegang op basis van SSH op Windows of Linux - PowerShell-externe toegang via SSH.
Notitie
De PowerShell Gallery (PSGallery) bevat een module en cmdlet waarmee SSH-gebaseerde remote communicatie automatisch wordt geconfigureerd. Installeer de Microsoft.PowerShell.RemotingTools
-module vanuit de PSGallery- en voer de cmdlet Enable-SSH
uit.
De cmdlets New-PSSession
, Enter-PSSession
en Invoke-Command
hebben nieuwe parametersets ter ondersteuning van SSH-verbindingen.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Als u een externe sessie wilt maken, geeft u de doelcomputer op met de parameter HostName en geeft u de gebruikersnaam op met Gebruikersnaam. Wanneer u de cmdlets interactief uitvoert, wordt u gevraagd om een wachtwoord.
Enter-PSSession -HostName <Computer> -UserName <Username>
Als u de parameter HostName gebruikt, vermeld dan de gebruikersnaamgegevens, gevolgd door het at-teken (@
), en vervolgens de computernaam.
Enter-PSSession -HostName <Username>@<Computer>
U kunt SSH-sleutelverificatie instellen met behulp van een privésleutelbestand met de parameter KeyFilePath. Zie OpenSSH Key Managementvoor meer informatie.
Groepsbeleid ondersteund
PowerShell bevat groepsbeleidsinstellingen om u te helpen bij het definiëren van consistente optiewaarden voor servers in een bedrijfsomgeving. Deze instellingen zijn onder andere:
- Consolesessieconfiguratie: hiermee stelt u een configuratie-eindpunt in waarin PowerShell wordt uitgevoerd.
- Schakel Modulelogboekregistratie in: Hiermee stelt u de eigenschap LogPipelineExecutionDetails van modules in.
- Schakel PowerShell scriptblok-logboekregistratie in: Hiermee schakelt u gedetailleerde logboekregistratie van alle PowerShell-scripts in.
- Scriptuitvoering inschakelen: hiermee stelt u het PowerShell-uitvoeringsbeleid in.
- Schakel PowerShell-transcriptie in: hiermee kunt u invoer en uitvoer van PowerShell-opdrachten vastleggen in transcripties op basis van tekst.
- Stel het standaardbronpad in voor Update-Help: hiermee stelt u de bron voor bijwerkbare Help in op een map, niet via internet.
Zie about_Group_Policy_Settingsvoor meer informatie.
PowerShell 7 bevat groepsbeleidssjablonen en een installatiescript in $PSHOME
.
Hulpprogramma's voor groepsbeleid maken gebruik van beheersjabloonbestanden (.admx
, .adml
) om beleidsinstellingen in de gebruikersinterface te vullen. Hierdoor kunnen beheerders beleidsinstellingen op basis van registers beheren. Het InstallPSCorePolicyDefinitions.ps1
-script installeert PowerShell-beheersjablonen op de lokale 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
Afzonderlijke gebeurtenislogboeken
Windows PowerShell en PowerShell 7 loggen gebeurtenissen naar afzonderlijke gebeurtenislogboeken. Gebruik de volgende opdracht om een lijst met de PowerShell-logboeken op te halen.
Get-WinEvent -ListLog *PowerShell*
Voor meer informatie, zie about_Logging_Windows.
Verbeterde bewerkingservaring met Visual Studio Code
Visual Studio Code (VSCode) met de PowerShell-extensie is de ondersteunde scriptomgeving voor PowerShell 7. De Windows PowerShell Integrated Scripting Environment (ISE) ondersteunt alleen Windows PowerShell.
De bijgewerkte PowerShell-extensie bevat:
- Nieuwe ISE-compatibiliteitsmodus
- PSReadLine in de geïntegreerde console, inclusief syntaxismarkering, bewerken over meerdere regels en terugzoeken
- Stabiliteits- en prestatieverbeteringen
- Nieuwe CodeLens-integratie
- Verbeterde automatische padaanvulling
Als u de overgang naar Visual Studio Code eenvoudiger wilt maken, gebruikt u de functie ISE-modus inschakelen beschikbaar in het opdrachtpalet. Met deze functie wordt VSCode overgeschakeld naar een ISE-stijlindeling. De indeling in een ISE-stijl biedt u alle nieuwe functies en mogelijkheden van PowerShell in een vertrouwde gebruikersomgeving.
Als u wilt overschakelen naar de nieuwe ISE-indeling, drukt u op Ctrl+Shift+P om het opdrachtpalette openen, typt u PowerShell
en selecteert u PowerShell: ISE-modus inschakelen.
Als u de indeling wilt instellen op de oorspronkelijke indeling, opent u het opdrachtpalet, selecteert u PowerShell: ISE-modus uitschakelen (herstellen naar standaardinstellingen).
Zie De ISE-ervaring repliceren in Visual Studio Code voor meer informatie over het aanpassen van de VSCode-indeling naar ISE
Notitie
Er zijn geen plannen om de ISE bij te werken met nieuwe functies. In de nieuwste versies van Windows 10 of Windows Server 2019 en hoger is de ISE nu een door de gebruiker verwijderbare functie. Er zijn geen plannen om de ISE definitief te verwijderen. Het PowerShell-team en de partners zijn gericht op het verbeteren van de scriptervaring in de PowerShell-extensie voor Visual Studio Code.
Volgende stappen
Bewapend met de kennis om effectief te migreren, nu PowerShell 7 installeren.