Sdílet prostřednictvím


about_Windows_PowerShell_Compatibility

Krátký popis

Popisuje funkce kompatibility prostředí Windows PowerShell pro PowerShell 7.

Dlouhý popis

Pokud manifest modulu indikuje, že modul je kompatibilní s PowerShellEm Core, moduly ve %windir%\system32\WindowsPowerShell\v1.0\Modules složce 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 WinPSCompatSession relaci se používají prostřednictvím implicitního 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 WinPSCompatSession relace, implicitní vzdálené komunikace vygeneruje modul proxy v adresáři uživatele $env:Temp 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. Pří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 UseWindowsPowerShell

    Import-Module -Name ScheduledTasks -UseWindowsPowerShell
    
  • Implicitně 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 -Local
    

    Pokud ještě není načtený, modul AppLockeru se při spuštění Get-AppLockerPolicyautomaticky načte .

Kompatibilita prostředí Windows PowerShell blokuje načítání modulů uvedených v WindowsPowerShellCompatibilityModuleDenyList nastavení 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 DisableImplicitWinCompat nastavení v konfiguračním souboru PowerShellu. Toto nastavení lze přidat do powershell.config.json souboru. 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.

Nastavení můžete přidat do konfiguračního WindowsPowerShellCompatibilityNoClobberModuleList souboru PowerShellu. Hodnota tohoto nastavení je čárkami oddělený seznam názvů modulů. Výchozí hodnota tohoto nastavení je:

"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]

Omezení

Funkce kompatibility Windows PowerShellu:

  1. Funguje jenom místně na počítačích s Windows.
  2. Vyžaduje Windows PowerShell 5.1.
  3. Pracuje s serializovanými parametry rutiny a návratové hodnoty, ne s živými objekty.
  4. 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 $env:Temp adresáři. 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.

Viz také