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:
- Csak helyileg működik Windows rendszerű számítógépeken
- A Windows PowerShell 5.1 használatához
- Szerializált parancsmagparamétereken működik, és értékeket ad vissza, nem élő objektumokon
- A Windows PowerShell-újraformálási munkamenetbe importált összes modul ugyanazzal a futtatótérrel rendelkezik.
Kulcsszavak
about_Windows_PowerShell_Compatibility