about_Windows_PowerShell_Compatibility

Rövid leírás

A Windows PowerShell PowerShell 7 kompatibilitási funkcióit ismerteti.

Hosszú leírás

Ha a modul jegyzékfájlja nem jelzi, hogy a modul kompatibilis a PowerShell Core-ral, a %windir%\system32\WindowsPowerShell\v1.0\Modules mappában lévő modulok Windows PowerShell 5.1-Windows PowerShell kompatibilitási szolgáltatása betölti a háttérben.

A Kompatibilitás funkció használata

Amikor az első modult Windows PowerShell kompatibilitási funkcióval importálja, a PowerShell létrehoz egy távoli munkamenetetWinPSCompatSession, amely egy háttérbeli Windows PowerShell 5.1-folyamaton fut. Ez a folyamat akkor jön létre, amikor a Kompatibilitás funkció importálja az első modult. A folyamat az utolsó ilyen modul eltávolításakor (a használatával Remove-Module) vagy a PowerShell-folyamat kilépésekor lesz lezárva.

A munkamenetbe WinPSCompatSession betöltött modulokat implicit táveléréssel használjuk, és az aktuális PowerShell-munkamenetben tükröződnek. Ez ugyanaz az átviteli módszer, mint a PowerShell-feladatokhoz.

Amikor importál egy modult a munkamenetbe, az WinPSCompatSession implicit távelérés létrehoz egy proxymodult a felhasználó $env:Temp címtárában, és importálja ezt a proxymodult az aktuális PowerShell-munkamenetbe. Ez lehetővé teszi, hogy a PowerShell észlelje, hogy a modul Windows PowerShell kompatibilitási funkcióval lett betöltve.

A munkamenet létrehozása után olyan műveletekhez használható, amelyek nem működnek megfelelően deszerializált objektumokon. A teljes folyamat Windows PowerShell lesz végrehajtva, és csak a végeredmény lesz visszaadva. Például:

$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
  "Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}

A kompatibilitási szolgáltatás kétféleképpen hívható meg:

  • Explicit módon importál egy modult a UseWindowsPowerShell paraméterrel

    Import-Module -Name ScheduledTasks -UseWindowsPowerShell
    
  • Implicit módon egy Windows PowerShell modul importálásával modulnév, elérési út vagy automatikus betöltés parancsfelderítéssel.

    Import-Module -Name ServerManager
    Get-AppLockerPolicy -Local
    

    Ha még nincs betöltve, az AppLocker modul automatikusan betöltődik a futtatáskor Get-AppLockerPolicy.

Windows PowerShell kompatibilitási letiltja a PowerShell konfigurációs fájljában a beállításban WindowsPowerShellCompatibilityModuleDenyList felsorolt modulok betöltését.

Ennek a beállításnak az alapértelmezett értéke a következő:

"WindowsPowerShellCompatibilityModuleDenyList":  [
   "PSScheduledJob","BestPractices","UpdateServices"
]

Implicit modulbetöltés kezelése

A Windows PowerShell kompatibilitási szolgáltatás implicit importálási viselkedésének letiltásához használja a DisableImplicitWinCompat powershell-konfigurációs fájlban található beállítást. Ez a beállítás hozzáadható a powershell.config.json fájlhoz. További információ: about_powershell_config.

Ez a példa bemutatja, hogyan hozhat létre olyan konfigurációs fájlt, amely letiltja Windows PowerShell kompatibilitás implicit modulbetöltési funkcióját.

$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
  "DisableImplicitWinCompat" = $true
  "Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath

A modulkompatibilitással kapcsolatos legfrissebb információkért tekintse meg a PowerShell 7 modulkompatibilitási listáját.

A parancsmagok clobberingének kezelése

A Windows PowerShell kompatibilitási funkció implicit távelérést használ a modulok kompatibilitási módban való betöltéséhez. Ennek az az eredménye, hogy a modul által exportált parancsok elsőbbséget élveznek az aktuális PowerShell 7-munkamenet azonos nevű parancsaival szemben. A PowerShell 7.0.0-s kiadásában ez tartalmazza a PowerShellt tartalmazó alapvető modulokat.

A PowerShell 7.1-ben a viselkedés úgy módosult, hogy a következő alapvető PowerShell-modulok ne legyenek beállítva:

  • Microsoft.PowerShell.ConsoleHost
  • Microsoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.Host
  • Microsoft.PowerShell.Management
  • Microsoft.PowerShell.Security
  • Microsoft.PowerShell.Utility
  • Microsoft.WSMan.Management

A PowerShell 7.1 emellett további modulokat is listázhat, amelyeket nem szabad kompatibilitási móddal elfedni.

A beállítást hozzáadhatja a WindowsPowerShellCompatibilityNoClobberModuleList PowerShell konfigurációs fájlhoz. Ennek a beállításnak az értéke a modulnevek vesszővel tagolt listája. Ennek a beállításnak az alapértelmezett értéke a következő:

"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]

Korlátozások

A Windows PowerShell kompatibilitási funkció:

  1. Csak Windows rendszerű számítógépeken működik helyileg
  2. Az 5.1-Windows PowerShell szükséges
  3. Szerializált parancsmagparamétereken és visszaadott értékeken működik, nem élő objektumokon
  4. Az Windows PowerShell távelérési munkamenetbe importált összes modul ugyanazt a futtatóteret használja.

Kulcsszavak

about_Windows_PowerShell_Compatibility

Lásd még