a Windows PowerShell-kompatibilitásról
Rövid leírás
Leírja a PowerShell 7 Windows PowerShell-kompatibilitási funkcióját.
Hosszú leírás
Hacsak a modul jegyzéke nem jelzi, hogy a modul kompatibilis a PowerShell Core-al, a %windir%\system32\WindowsPowerShell\v1.0\Modules mappában lévő modulok egy Windows PowerShell 5.1 háttérfolyamatban, a Windows PowerShell-kompatibilitás által betöltődnek. jellemzője.
A kompatibilitási funkció használata
Amikor az első modult a Windows PowerShell-kompatibilitási szolgáltatással importálja, a PowerShell létrehoz egy WinPSCompatSession nevű távoli munkamenetet, amely egy háttérben futó Windows PowerShell 5.1-folyamatban fut. Ez a folyamat akkor jön létre, amikor a kompatibilitási szolgáltatás importálja az első modult. A folyamat akkor zárul le, amikor az utolsó ilyen modult eltávolítják (a Remove-Module használatával), vagy amikor a PowerShell-folyamat kilép.
A WinPSCompatSession munkamenetben betöltött modulok implicit távvezérléssel kerülnek felhasználásra, és tükröződnek az aktuális PowerShell-munkamenetben. Ez ugyanaz a szállítási módszer, amelyet a PowerShell-feladatokhoz használnak.
Amikor egy modult importálnak a WinPSCompatSession munkamenetbe, az implicit távvezérlés létrehoz egy proxymodult a felhasználó $env:Temp könyvtárában, és importálja ezt a proxymodult az aktuális PowerShell-munkamenetbe. Ez lehetővé teszi a PowerShellnek, hogy észlelje, hogy a modult a Windows PowerShell-kompatibilitási funkcióval töltötték be.
A munkamenet létrehozása után használható olyan műveletekhez, amelyek nem megfelelően működnek a deszerializált objektumokon. A teljes folyamat a Windows PowerShellben fut le, és csak a végeredmény kerül visszaadásra. Például:
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
A kompatibilitási funkciót kétféleképpen lehet előhívni:
Kifejezetten egy modul importálásával a UseWindowsPowerShell paraméter használatával
Import-Module -Name ScheduledTasks -UseWindowsPowerShellImplicit módon egy Windows PowerShell-modul importálásával modulnév, elérési út vagy parancsfelderítésen keresztüli automatikus betöltéssel.
Import-Module -Name ServerManager Get-AppLockerPolicy -LocalHa még nincs betöltve, az AppLocker modul automatikusan betöltődik a
Get-AppLockerPolicyfuttatásakor.
A Windows PowerShell-kompatibilitás blokkolja a PowerShell konfigurációs fájl WindowsPowerShellCompatibilityModuleDenyList beállításában felsorolt modulok betöltését.
Ennek a beállításnak az alapértelmezett értéke:
"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 beállítást a PowerShell konfigurációs fájljában. 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 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 modulok kompatibilitásával kapcsolatos legfrissebb információkért tekintse meg a PowerShell 7 modul kompatibilitási listáját.
A parancsmag-tömörítés kezelése
A Windows PowerShell-kompatibilitási funkció implicit távvezérlést használ a modulok kompatibilitási módban történő betöltéséhez. Ennek eredményeként 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 magában foglalta a PowerShellhez mellékelt alapvető modulokat.
A PowerShell 7.1-ben a viselkedés úgy módosult, hogy a következő alapvető PowerShell-modulok ne legyenek bezárva:
- 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 lehetőséget adott további olyan modulok felsorolására is, amelyeket nem szabad a kompatibilitási móddal elzárni.
Hozzáadhatja a WindowsPowerShellCompatibilityNoClobberModuleList beállítást a PowerShell konfigurációs fájljához. Ennek a beállításnak az értéke a modulnevek vesszővel elválasztott listája. Ennek a beállításnak az alapértelmezett értéke:
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
Korlátozások
A Windows PowerShell-kompatibilitási funkció:
- Csak helyileg működik Windows számítógépeken
- Szükséges, hogy a Windows PowerShell 5.1
- A soros parancsmag-paraméterekkel és visszatérési értékekkel működik, nem pedig az élő objektumokon
- A Windows PowerShell távoli munkamenetbe importált összes modul ugyanazon a futási területen osztozik.
Kulcsszavak
about_Windows_PowerShell_Compatibility
Lásd még
- about_Modules
- Import-Module