about_Windows_PowerShell_Compatibility

Krátký popis

Popisuje funkci kompatibility Windows PowerShell pro PowerShell 7.

Dlouhý popis

Pokud manifest modulu nenaznačuje, že modul je kompatibilní s PowerShell Core, moduly ve %windir%\system32\WindowsPowerShell\v1.0\Modules složce se načtou na pozadí Windows PowerShell procesu 5.1 pomocí funkce kompatibility Windows PowerShell.

Použití funkce Kompatibilita

Při importu prvního modulu pomocí funkce kompatibility Windows PowerShell vytvoří PowerShell vzdálenou relaci s názvem WinPSCompatSession spuštěnou na pozadí Windows PowerShell procesu 5.1. Tento proces se vytvoří, když funkce kompatibility naimportuje první modul. Proces se zavře, když se odebere poslední takový modul (pomocí Remove-Module) nebo když se proces PowerShellu ukončí.

Moduly načtené v WinPSCompatSession relaci se používají prostřednictvím implicitní vzdálené komunikace a promítnou 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 modul byl načten pomocí funkce kompatibility Windows PowerShell.

Po vytvoření relace je možné ji použít pro operace, které nefungují správně na deserializovaných objektech. Celý kanál se spustí v Windows PowerShell a vrátí se pouze 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 je možné vyvolat dvěma způsoby:

  • Explicitně importem modulu pomocí parametru UseWindowsPowerShell

    Import-Module -Name ScheduledTasks -UseWindowsPowerShell
    
  • Implicitně importem modulu Windows PowerShell 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 .

Windows PowerShell Kompatibilita blokuje načítání modulů uvedených v nastavení v konfiguračním WindowsPowerShellCompatibilityModuleDenyList 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 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 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 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 PowerShell:

  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 Windows PowerShell sdílejí stejný runspace.

Klíčová slova

about_Windows_PowerShell_Compatibility

Viz také