Megosztás a következőn keresztül:


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. A PowerShell akkor hozza létre ezt a folyamatot, amikor a kompatibilitási funkció importálja az első modult. A folyamat az utolsó 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. A proxymodul lehetővé teszi, hogy a PowerShell észlelje, hogy a modul a Windows PowerShell kompatibilitási funkciójá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 módosult, így a következő alapvető PowerShell-modulok nem változtak:

  • 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 több modult kizárjon a kompatibilitási móddal való összefésülésből.

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. Windows PowerShell 5.1-et igényel
  3. Szerializált parancsmagparamétereken működik, és értékeket ad vissza, nem élő objektumokon
  4. Egyetlen futtatókörnyezetet oszt meg a Windows PowerShell-újraküldési munkamenetbe importált összes modulhoz

Ideiglenes fájlok

A Windows PowerShell kompatibilitási funkciója implicit remoting használatával teszi elérhetővé a Windows PowerShell 5.1-modulokat a PowerShell 7-ben. Az implicit újraegyensúlyozás ideiglenes fájlokat hoz létre a $Env:TEMP címtárban. Minden modul egy külön mappában van tárolva, az alábbi elnevezési konvencióval:

  • remoteIpMoProxy_<ModuleName>_<ModuleVersion>_localhost_<SessionGuid>.

A PowerShell eltávolítja az ideiglenes fájlokat, amikor eltávolítja az utolsó próbamodult a munkamenetből, vagy bezárja a munkamenetet.

Lásd még