about_Windows_PowerShell_Compatibility
Kort beskrivning
Beskriver Funktionerna för Windows PowerShell-kompatibilitet för PowerShell 7.
Lång beskrivning
Om inte modulmanifestet anger att modulen är kompatibel med PowerShell Core läses modulerna %windir%\system32\WindowsPowerShell\v1.0\Modules
i mappen in i en Windows PowerShell 5.1-bakgrundsprocess med Windows PowerShell-kompatibilitetsfunktionen.
Använda kompatibilitetsfunktionen
När den första modulen importeras med windows PowerShell-kompatibilitetsfunktionen skapar PowerShell en fjärrsession med namnet WinPSCompatSession
som körs i en Windows PowerShell 5.1-bakgrundsprocess. Den här processen skapas när kompatibilitetsfunktionen importerar den första modulen. Processen stängs när den sista modulen tas bort (med hjälp av Remove-Module
) eller när PowerShell-processen avslutas.
Modulerna som läses in i WinPSCompatSession
sessionen används via implicit fjärrkommunikation och återspeglas i den aktuella PowerShell-sessionen. Det här är samma transportmetod som används för PowerShell-jobb.
När en modul importeras till WinPSCompatSession
sessionen genererar implicit fjärrkommunikation en proxymodul i användarens $env:Temp
katalog och importerar den här proxymodulen till den aktuella PowerShell-sessionen. På så sätt kan PowerShell identifiera att modulen lästes in med hjälp av Windows PowerShell-kompatibilitetsfunktioner.
När sessionen har skapats kan den användas för åtgärder som inte fungerar korrekt på deserialiserade objekt. Hela pipelinen körs i Windows PowerShell och endast slutresultatet returneras. Till exempel:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
Kompatibilitetsfunktionen kan anropas på två sätt:
Explicit genom att importera en modul med parametern UseWindowsPowerShell
Import-Module -Name ScheduledTasks -UseWindowsPowerShell
Implicit genom att importera en Windows PowerShell-modul efter modulnamn, sökväg eller automatisk inläsning via kommandoidentifiering.
Import-Module -Name ServerManager Get-AppLockerPolicy -Local
Om den inte redan har lästs in läses AppLocker-modulen in automatiskt när du kör
Get-AppLockerPolicy
.
Windows PowerShell-kompatibilitet blockerar inläsning av moduler som anges i WindowsPowerShellCompatibilityModuleDenyList
inställningen i PowerShell-konfigurationsfilen.
Standardvärdet för den här inställningen är:
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
Hantera implicit modulinläsning
Om du vill inaktivera implicit importbeteende för Windows PowerShell-kompatibilitetsfunktionen använder du DisableImplicitWinCompat
inställningen i en PowerShell-konfigurationsfil. Den här inställningen kan läggas till i powershell.config.json
filen. Mer information finns i about_powershell_config.
Det här exemplet visar hur du skapar en konfigurationsfil som inaktiverar den implicita modulinläsningsfunktionen i Windows PowerShell-kompatibilitet.
$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
"DisableImplicitWinCompat" = $true
"Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath
Mer information om modulkompatibilitet finns i kompatibilitetslistan för PowerShell 7-modulen.
Hantera cmdlet-kloning
Kompatibilitetsfunktionen i Windows PowerShell använder implicit fjärrkommunikation för att läsa in moduler i kompatibilitetsläge. Resultatet är att kommandon som exporteras av modulen har företräde framför kommandon med samma namn i den aktuella PowerShell 7-sessionen. I PowerShell 7.0.0-versionen inkluderade detta de kärnmoduler som levereras med PowerShell.
I PowerShell 7.1 ändrades beteendet så att följande PowerShell-kärnmoduler inte klonas:
- Microsoft.PowerShell.ConsoleHost
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
PowerShell 7.1 har också lagt till möjligheten att lista ytterligare moduler som inte ska klonas av kompatibilitetsläget.
Du kan lägga till inställningen i WindowsPowerShellCompatibilityNoClobberModuleList
PowerShell-konfigurationsfilen. Värdet för den här inställningen är en kommaavgränsad lista med modulnamn. Standardvärdet för den här inställningen är:
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
Begränsningar
Windows PowerShell-kompatibilitetsfunktionen:
- Fungerar endast lokalt på Windows-datorer
- Kräver att Windows PowerShell 5.1
- Fungerar på serialiserade cmdlet-parametrar och returvärden, inte på levande objekt
- Alla moduler som importeras till Windows PowerShell-fjärrkommunikationssessionen delar samma runspace.
Nyckelord
about_Windows_PowerShell_Compatibility
Se även
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för