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, WinPSCompatSession která běží na pozadí procesu Windows PowerShellu 5.1. Tento proces se vytvoří, když funkce kompatibility importuje první modul. Proces se zavře, když se poslední takový modul odebere (pomocí Remove-Module) nebo když se proces PowerShellu ukončí.

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. To 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 vypsat další moduly, které by neměly být zahlcené 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, aby windows PowerShell 5.1
  3. Pracuje s serializovanými parametry rutiny a návratové hodnoty, ne s živými objekty.
  4. Všechny moduly importované do relace vzdálené komunikace prostředí Windows PowerShell sdílejí stejný runspace.

Klíčová slova

about_Windows_PowerShell_Compatibility

Viz také