Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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 -UseWindowsPowerShellImplicit 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 -LocalHa 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:
- Csak helyileg működik Windows rendszerű számítógépeken
- Windows PowerShell 5.1-et igényel
- Szerializált parancsmagparamétereken működik, és értékeket ad vissza, nem élő objektumokon
- 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.