Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Krátký popis
Popisuje funkce kompatibility prostředí Windows PowerShell pro PowerShell 7.
Dlouhý popis
Pokud manifest modulu nenaznačuje, že modul je kompatibilní s PowerShellEm Core, moduly ve složce %windir%\system32\WindowsPowerShell\v1.0\Modules se načtou na pozadí procesu Windows PowerShellu 5.1 pomocí funkce kompatibility prostředí Windows PowerShell.
Použití funkce kompatibility
Při importu prvního modulu pomocí funkce kompatibility prostředí Windows PowerShell vytvoří PowerShell vzdálenou relaci s názvem WinPSCompatSession, která běží na pozadí procesu Windows PowerShellu 5.1. PowerShell tento proces vytvoří, když funkce kompatibility naimportuje první modul. Proces se zavře při odebrání posledního modulu (pomocí Remove-Module) nebo při ukončení procesu PowerShellu.
Moduly načtené v relaci WinPSCompatSession se používají prostřednictvím implicitní vzdálené komunikace a odráží se do aktuální relace PowerShellu. Jedná se o stejnou metodu přenosu, která se používá pro úlohy PowerShellu.
Když se modul naimportuje do relace WinPSCompatSession, implicitní vzdálené komunikace vygeneruje modul proxy v adresáři $Env:TEMP uživatele a importuje tento modul proxy do aktuální relace PowerShellu. Modul proxy umožňuje PowerShellu zjistit, že se modul načetl pomocí funkce kompatibility prostředí Windows PowerShell.
Po vytvoření relace se dá použít pro operace, které na deserializovaných objektech nefungují správně. Celý kanál se spustí ve Windows PowerShellu a vrátí se jenom konečný výsledek. Například:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
Funkci kompatibility lze vyvolat dvěma způsoby:
Explicitně importem modulu pomocí parametru UseWindowsPower Shell
Import-Module -Name ScheduledTasks -UseWindowsPowerShellImplicitně importem modulu Windows PowerShellu podle názvu modulu, cesty nebo automatického načítání prostřednictvím zjišťování příkazů.
Import-Module -Name ServerManager Get-AppLockerPolicy -LocalPokud ještě není načtený, modul AppLockeru se automaticky načte při spuštění
Get-AppLockerPolicy.
Kompatibilita prostředí Windows PowerShell blokuje načítání modulů uvedených v nastavení WindowsPowerShellCompatibilityModuleDenyList v konfiguračním souboru PowerShellu.
Výchozí hodnota tohoto nastavení je:
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
Správa implicitního načítání modulů
Pokud chcete zakázat implicitní chování importu funkce kompatibility prostředí Windows PowerShell, použijte nastavení DisableImplicitWinCompat v konfiguračním souboru PowerShellu. Toto nastavení lze přidat do souboru powershell.config.json. Další informace najdete v tématu about_PowerShell_Config.
Tento příklad ukazuje, jak vytvořit konfigurační soubor, který zakáže funkci implicitního načítání modulů kompatibility prostředí Windows PowerShell.
$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
"DisableImplicitWinCompat" = $true
"Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -SettingsFile $ConfigPath
Další informace o kompatibilitě modulů najdete v seznamu kompatibility modulů PowerShellu 7.
Správa zahlcené rutiny
Funkce kompatibility prostředí Windows PowerShell používá implicitní vzdálené komunikace k načtení modulů v režimu kompatibility. Výsledkem je, že příkazy exportované modulem mají přednost před příkazy se stejným názvem v aktuální relaci PowerShellu 7. Ve verzi PowerShellu 7.0.0 to zahrnovalo základní moduly, které jsou součástí PowerShellu.
V PowerShellu 7.1 se chování změnilo tak, aby následující základní moduly PowerShellu nebyly zahlcené:
- Microsoft.PowerShell.ConsoleHost
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
PowerShell 7.1 také přidal možnost vyloučit další moduly z clobberingu režimem kompatibility.
Do konfiguračního souboru PowerShellu můžete přidat nastavení WindowsPowerShellCompatibilityNoClobberModuleList. Hodnota tohoto nastavení je čárkami oddělený seznam názvů modulů. Výchozí hodnota tohoto nastavení je:
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
Omezení
Funkce kompatibility Windows PowerShellu:
- Funguje jenom místně na počítačích s Windows.
- Vyžaduje Windows PowerShell 5.1.
- Pracuje s serializovanými parametry rutiny a návratové hodnoty, ne s živými objekty.
- Sdílí jeden runspace pro všechny moduly importované do relace vzdálené komunikace Prostředí Windows PowerShell.
Dočasné soubory
Funkce kompatibility Prostředí Windows PowerShell používá implicitní vzdálené komunikace, aby byly moduly Prostředí Windows PowerShell 5.1 dostupné v PowerShellu 7. Implicitní vzdálené komunikace vytvoří dočasné soubory v adresáři $Env:TEMP. Každý modul proxied je uložený v samostatné složce s následující konvencí pojmenování:
-
remoteIpMoProxy_<ModuleName>_<ModuleVersion>_localhost_<SessionGuid>.
PowerShell odebere dočasné soubory, když odeberete poslední modul proxied z relace nebo relaci zavřete.