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.exe
den 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\WindowsPowerShell
profilens plats . - I PowerShell 7 är
$HOME\Documents\PowerShell
profilens 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-PSSession
och 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!