about_Windows_PowerShell_Compatibility

Rövid leírás

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

Hosszú leírás

Ha a moduljegyzék nem jelzi, hogy a modul kompatibilis a PowerShell Core-tal, a %windir%\system32\WindowsPowerShell\v1.0\Modules mappában lévő modulokat a Windows PowerShell kompatibilitási funkciója egy háttérbeli Windows PowerShell 5.1-folyamatba tölti be.

A Kompatibilitás funkció használata

Amikor az első modult a Windows PowerShell kompatibilitási funkciójával importálja, a PowerShell létrehoz egy távoli munkamenetet WinPSCompatSession , amely egy háttérben futó Windows PowerShell 5.1-folyamaton fut. Ez a folyamat akkor jön létre, amikor a kompatibilitási 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 betöltött modulok implicit újramotálással vannak használatban WinPSCompatSession , és az aktuális PowerShell-munkamenetben tükröződnek. Ez ugyanaz az átviteli módszer, amelyet a PowerShell-feladatokhoz használnak.

Amikor importál egy modult a munkamenetbe, az WinPSCompatSession implicit remoting 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 a 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 a deszerializált objektumokon. A teljes folyamat a Windows PowerShellben lesz végrehajtva, és csak a végeredmény lesz visszaadva. Példa:

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

A kompatibilitási funkció kétféleképpen hívható meg:

  • Kifejezetten egy modul importálásával a UseWindowsPowerShell paraméterrel

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

    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.

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

A beállítás alapértelmezett értéke a következő:

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

Implicit modulbetöltés kezelése

A Windows PowerShell kompatibilitási funkció implicit importálási viselkedésének letiltásához használja a DisableImplicitWinCompat Beállítást egy PowerShell-konfigurációs fájlban. 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 a 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.

Parancsmagok gyorsítótárazásának kezelése

A Windows PowerShell kompatibilitási funkciója implicit remoting használatával tölti be a modulokat kompatibilitási módban. Az eredmény az, hogy a modul által exportált parancsok elsőbbséget élveznek az azonos nevű parancsokkal szemben az aktuális PowerShell 7-munkamenetben. A PowerShell 7.0.0 kiadásában ez tartalmazza a PowerShell-lel szállított alapvető modulokat.

A PowerShell 7.1-ben a viselkedés megváltozott, 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 azt is lehetővé tette, hogy olyan további modulokat is felsoroljon, amelyeket nem szabad kompatibilitási móddal összefésülni.

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. A beállítás alapértelmezett értéke a következő:

"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]

Korlátozások

A Windows PowerShell kompatibilitási funkciója:

  1. Csak helyileg működik Windows rendszerű számítógépeken
  2. A Windows PowerShell 5.1 használatához
  3. Szerializált parancsmagparamétereken működik, és értékeket ad vissza, nem élő objektumokon
  4. A Windows PowerShell-újraformálási munkamenetbe importált összes modul ugyanazzal a futtatótérrel rendelkezik.

Kulcsszavak

about_Windows_PowerShell_Compatibility

Lásd még