Migrera från Windows PowerShell 5.1 till PowerShell 7

PowerShell 7 är utformat för molnmiljöer, lokala miljöer och hybridmiljöer och är fullspäckat med förbättringar och nya funktioner.

  • Installerar och kör sida vid sida med Windows PowerShell
  • Förbättrad kompatibilitet med befintliga Windows PowerShell-moduler
  • Nya språkfunktioner som ternary-operatorer och ForEach-Object -Parallel
  • Förbättrad prestanda
  • SSH-baserad fjärrkommunikation
  • Samverkan mellan plattformar
  • Stöd för Docker-containrar

PowerShell 7 fungerar sida vid sida med Windows PowerShell så att du enkelt kan testa och jämföra mellan utgåvor före distributionen. Migreringen är enkel, snabb och säker.

PowerShell 7 stöds på följande Windows-operativsystem:

  • Windows 10 och 11
  • Windows Server 2016, 2019 och 2022

PowerShell 7 körs också på macOS och flera Linux-distributioner. En lista över operativsystem som stöds och information om supportlivscykeln finns i Livscykeln för PowerShell-support.

Installera PowerShell 7

För flexibilitet och för att stödja IT-, DevOps-teknikers och utvecklares behov finns det flera tillgängliga alternativ för att installera PowerShell 7. I de flesta fall kan installationsalternativen reduceras till följande metoder:

  • Distribuera PowerShell med hjälp av MSI-paketet
  • Distribuera PowerShell med zip-paketet

Kommentar

MSI-paketet kan distribueras och uppdateras med hanteringsprodukter som Microsoft Configuration Manager. Ladda ned paketen från GitHub-versionssidan.

Distribution av MSI-paketet kräver administratörsbehörighet. ZIP-paketet kan distribueras av alla användare. ZIP-paketet är det enklaste sättet att installera PowerShell 7 för testning innan du genomför en fullständig installation.

Du kan också installera PowerShell 7 via Windows Store eller winget. Mer information om båda dessa metoder finns i de detaljerade anvisningarna i Installera PowerShell i Windows.

Använda PowerShell 7 sida vid sida med Windows PowerShell 5.1

PowerShell 7 är utformat för att samexistera med Windows PowerShell 5.1. Följande funktioner säkerställer att din investering i PowerShell skyddas och att migreringen till PowerShell 7 är enkel.

  • Separat installationssökväg och körbart namn
  • Separera PSModulePath
  • Separata profiler för varje version
  • Förbättrad modulkompatibilitet
  • Nya fjärrkommunikationsslutpunkter
  • Stöd för grupprincip
  • Separata händelseloggar

Skillnader i .NET-versioner

PowerShell 7.2 bygger på .NET 6.0. Windows PowerShell 5.1 bygger på .NET Framework 4.x. Skillnaderna mellan .NET-versionerna kan påverka beteendet för dina skript, särskilt om du anropar .NET-metoden direkt. Mer information finns i Skillnader mellan Windows PowerShell 5.1 och PowerShell 7.x.

Separat installationssökväg och körbart namn

PowerShell 7 installeras i en ny katalog, vilket möjliggör körning sida vid sida med Windows PowerShell 5.1.

Installera platser efter version:

  • Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell 6.x: $env:ProgramFiles\PowerShell\6
  • PowerShell 7: $env:ProgramFiles\PowerShell\7

Den nya platsen läggs till i din PATH så att du kan köra både Windows PowerShell 5.1 och PowerShell 7. Om du migrerar från PowerShell 6.x till PowerShell 7 tas PowerShell 6 bort och PATH ersätts.

I Windows PowerShell heter den körbara PowerShell-filen powershell.exe. I version 6 och senare heter pwsh.exeden körbara filen . Det nya namnet gör det enkelt att stödja körning sida vid sida av båda versionerna.

Separera PSModulePath

Som standard lagrar Windows PowerShell- och PowerShell 7-moduler på olika platser. PowerShell 7 kombinerar dessa platser i $Env:PSModulePath miljövariabeln. När du importerar en modul efter namn kontrollerar PowerShell den plats som anges av $Env:PSModulePath. På så sätt kan PowerShell 7 läsa in både Core- och Desktop-moduler.

Installera omfång Windows PowerShell 5.1 PowerShell 7.0
PowerShell-moduler $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $env:ProgramFiles\PowerShell\7\Modules
Användaren har installerats
AllUsers-omfång
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Användaren har installerats
CurrentUser-omfång
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

I följande exempel visas standardvärdena $Env:PSModulePath för för varje 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
    
  • För 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
    

Observera att PowerShell 7 innehåller Windows PowerShell-sökvägarna och PowerShell 7-sökvägarna för automatisk inläsning av moduler.

Kommentar

Det kan finnas ytterligare sökvägar om du har ändrat miljövariabeln PSModulePath eller har installerat anpassade moduler eller program.

Mer information finns i about_PSModulePath.

Mer information om moduler finns i about_Modules.

Separata profiler

En PowerShell-profil är ett skript som körs när PowerShell startar. Det här skriptet anpassar din miljö genom att lägga till kommandon, alias, funktioner, variabler, moduler och PowerShell-enheter. Profilskriptet gör dessa anpassningar tillgängliga i varje session utan att behöva återskapa dem manuellt.

Sökvägen till profilens plats har ändrats i PowerShell 7.

  • I Windows PowerShell 5.1 är $HOME\Documents\WindowsPowerShellprofilens plats .
  • I PowerShell 7 är $HOME\Documents\PowerShellprofilens plats .

Profilfilnamnen har också ändrats:

$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

Mer information about_Profiles.

PowerShell 7-kompatibilitet med Windows PowerShell 5.1-moduler

De flesta moduler som du använder i Windows PowerShell 5.1 fungerar redan med PowerShell 7, inklusive Azure PowerShell och Active Directory. Vi fortsätter att arbeta med andra team för att lägga till inbyggt PowerShell 7-stöd för fler moduler, inklusive Microsoft Graph, Office 365 och andra. Den aktuella listan över moduler som stöds finns i PowerShell 7-modulkompatibilitet.

Kommentar

I Windows har vi också lagt till en UseWindowsPowerShell-växel för att Import-Module underlätta övergången till PowerShell 7 för dem som använder inkompatibla moduler. Mer information om den här funktionen finns i about_Windows_PowerShell_Compatibility.

PowerShell fjärrkommunikation

Med PowerShell-fjärrkommunikation kan du köra alla PowerShell-kommandon på en eller flera fjärrdatorer. Du kan upprätta beständiga anslutningar, starta interaktiva sessioner och köra skript på fjärrdatorer.

WS-Management-fjärrkommunikation

Windows PowerShell 5.1 och nedan använder WS-Management-protokollet (WSMAN) för anslutningsförhandling och datatransport. Windows Remote Management (WinRM) använder WSMAN-protokollet. Om WinRM har aktiverats använder PowerShell 7 den befintliga Windows PowerShell 5.1-slutpunkten med namnet Microsoft.PowerShell för fjärrkommunikationsanslutningar. Om du vill uppdatera PowerShell 7 så att den innehåller en egen slutpunkt kör du cmdleten Enable-PSRemoting . Information om hur du ansluter till specifika slutpunkter finns i WS-Management Remoting i PowerShell

Om du vill använda Windows PowerShell-fjärrkommunikation måste fjärrdatorn konfigureras för fjärrhantering. Mer information, inklusive instruktioner, finns i Om fjärrkrav.

Mer information om hur du arbetar med fjärrkommunikation finns i Om fjärranslutning

SSH-baserad fjärrkommunikation

SSH-baserad fjärrkommunikation lades till i PowerShell 6.x för att stödja andra operativsystem som inte kan använda inbyggda Windows-komponenter som WinRM. SSH-fjärrkommunikation skapar en PowerShell-värdprocess på måldatorn som ett SSH-undersystem. Mer information och exempel på hur du konfigurerar SSH-baserad fjärrkommunikation i Windows eller Linux finns i: PowerShell-fjärrkommunikation via SSH.

Kommentar

PowerShell-galleriet (PSGallery) innehåller en modul och cmdlet som automatiskt konfigurerar SSH-baserad fjärrkommunikation. Installera modulen Microsoft.PowerShell.RemotingTools från PSGallery och kör cmdleten Enable-SSH .

Cmdletarna New-PSSession, Enter-PSSessionoch Invoke-Command har nya parameteruppsättningar som stöder SSH-anslutningar.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Om du vill skapa en fjärrsession anger du måldatorn med parametern HostName och anger användarnamnet med UserName. När du kör cmdletarna interaktivt uppmanas du att ange ett lösenord.

Enter-PSSession -HostName <Computer> -UserName <Username>

När du använder parametern HostName kan du också ange användarnamnsinformationen följt av vid-tecknet (@), följt av datornamnet.

Enter-PSSession -HostName <Username>@<Computer>

Du kan konfigurera SSH-nyckelautentisering med hjälp av en privat nyckelfil med parametern KeyFilePath . Mer information finns i OpenSSH-nyckelhantering.

Grupprincip stöds

PowerShell innehåller grupprincipinställningar som hjälper dig att definiera konsekventa alternativvärden för servrar i en företagsmiljö. Några av dessa inställningar är:

  • Konfiguration av konsolsession: Anger en konfigurationsslutpunkt där PowerShell körs.
  • Aktivera modulloggning: Anger egenskapen LogPipelineExecutionDetails för moduler.
  • Aktivera Loggning av PowerShell-skriptblock: Aktiverar detaljerad loggning av alla PowerShell-skript.
  • Aktivera skriptkörning: Anger PowerShell-körningsprincipen.
  • Aktivera PowerShell-transkription: möjliggör insamling av indata och utdata från PowerShell-kommandon i textbaserade transkriptioner.
  • Ange standardsökvägen för Uppdateringshjälp: Anger källan för updatable-hjälpen till en katalog, inte Internet.

Mer information finns i about_Group_Policy_Settings.

PowerShell 7 innehåller grupprincipmallar och ett installationsskript i $PSHOME.

Grupprincipverktyg använder administrativa mallfiler (.admx, .adml) för att fylla i principinställningar i användargränssnittet. På så sätt kan administratörer hantera registerbaserade principinställningar. Skriptet InstallPSCorePolicyDefinitions.ps1 installerar PowerShell Administrativa mallar på den lokala datorn.

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

Separata händelseloggar

Windows PowerShell- och PowerShell 7-logghändelser för att separera händelseloggar. Använd följande kommando för att hämta en lista över PowerShell-loggarna.

Get-WinEvent -ListLog *PowerShell*

Mer information finns i about_Logging_Windows.

Förbättrad redigeringsupplevelse med Visual Studio Code

Visual Studio Code (VSCode) med PowerShell-tillägget är den skriptmiljö som stöds för PowerShell 7. Windows PowerShell Integrated Scripting Environment (ISE) stöder endast Windows PowerShell.

Det uppdaterade PowerShell-tillägget innehåller:

  • Nytt ISE-kompatibilitetsläge
  • PSReadLine i den integrerade konsolen, inklusive syntaxmarkering, redigering med flera rader och bakåtsökning
  • Stabilitets- och prestandaförbättringar
  • Ny CodeLens-integrering
  • Förbättrad automatisk komplettering av sökväg

Om du vill göra övergången till Visual Studio Code enklare använder du funktionen Aktivera ISE-läge i kommandopaletten. Den här funktionen växlar VSCode till en ISE-layout. Layouten i ISE-stil ger dig alla nya funktioner och funktioner i PowerShell i en välbekant användarupplevelse.

Om du vill växla till den nya ISE-layouten trycker du på Ctrl+Skift+P för att öppna kommandopaletten, skriver PowerShell och väljer PowerShell: Aktivera ISE-läge.

Om du vill ange layouten till den ursprungliga layouten öppnar du kommandopaletten, väljer PowerShell: Inaktivera ISE-läge (återställ till standardvärden).

Mer information om hur du anpassar VSCode-layouten till ISE finns i Replikera ISE-upplevelsen i Visual Studio Code

Kommentar

Det finns inga planer på att uppdatera ISE med nya funktioner. I de senaste versionerna av Windows 10 eller Windows Server 2019 och senare är ISE nu en funktion som kan avinstalleras av användaren. Det finns inga planer på att ta bort ISE permanent. PowerShell-teamet och dess partner fokuserar på att förbättra skriptupplevelsen i PowerShell-tillägget för Visual Studio Code.

Nästa steg

Installera PowerShell 7 nu med kunskap för att effektivt migrera!