about_Windows_PowerShell_Compatibility
Kort beskrivning
Beskriver funktionerna för Windows PowerShell-kompatibilitet för PowerShell 7.
Lång beskrivning
Såvida inte modulmanifestet anger att modulen är kompatibel med PowerShell Core läses modulerna i %windir%\system32\WindowsPowerShell\v1.0\Modules
mappen in i en bakgrund Windows PowerShell 5.1-process genom Windows PowerShell kompatibilitetsfunktion.
Använda kompatibilitetsfunktionen
När den första modulen importeras med hjälp av Windows PowerShell kompatibilitetsfunktion skapar PowerShell en fjärrsession med namnet WinPSCompatSession
som körs i en bakgrundsprocess Windows PowerShell 5.1. 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å avserialiserade objekt. Hela pipelinen körs i Windows PowerShell och endast slutresultatet returneras. 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 Compatibility.
$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-moduler .
Hantera cmdlet-kloning
Funktionen Windows PowerShell-kompatibilitet 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 kärnmodulerna 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
Funktionen Windows PowerShell-kompatibilitet:
- Fungerar bara lokalt på Windows-datorer
- Kräver att Windows PowerShell 5.1
- Fungerar på serialiserade cmdlet-parametrar och returvärden, inte på live-objekt
- Alla moduler som importeras till Windows PowerShell fjärrkommunikationssession delar samma körningsyta.
Nyckelord
about_Windows_PowerShell_Compatibility