Delen via


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-PSSessionen 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.