Weboldal keresés

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 -UseWindowsPowerShell
    
  • Implicit 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 -Local
    

    Ha még nincs betöltve, az AppLocker modul automatikusan betöltődik a Get-AppLockerPolicy futtatá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ó:

  1. Csak helyileg működik Windows számítógépeken
  2. Szükséges, hogy a Windows PowerShell 5.1
  3. A soros parancsmag-paraméterekkel és visszatérési értékekkel működik, nem pedig az élő objektumokon
  4. 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

Kapcsolódó cikkek