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 különböző kiadásai különböző mögöttes futtatókörnyezeteken futnak.
Hosszú leírás
A PowerShell 5.1-ben a PowerShell több editions fut egy másik .NET futtatókörnyezetben. A PowerShell 6.0-ról a PowerShell két kiadása érhető el:
- Desktop, amely .NET Keretrendszeren fut. A PowerShell 4 és újabb, valamint a PowerShell 5.1 teljes funkcionalitású Windows kiadásokhoz érhető el, mint például Windows Desktop, Windows Server, Windows Server Core és a legtöbb más Windows operációs rendszer. Ez az eredeti PowerShell-kiadás, és az operációs rendszer alapértelmezett telepítésében szerepel.
- Core, amely .NET Core-on fut. A PowerShell 6.0-s és újabb verziói a korábbi PowerShell-kiadásokkal együtt vannak telepítve teljes funkcionalitású Windows kiadásokon, néhány csökkentett erőforrásigényű Windows kiadáson, például Windows Nano Serveren és Windows IoT-n, vagy nem Windows platformokon, például Linuxon és macOS-en.
Mivel a PowerShell kiadása megfelel a .NET futtatókörnyezetének, ez a .NET API és a PowerShell modul kompatibilitásának elsődleges mutatója; egyes .NET API-k, típusok vagy metódusok nem érhetők el mindkét .NET futtatókörnyezetben, és ez hatással van az ezektől függő PowerShell-szkriptekre és modulokra.
Az $PSEdition automatikus változó
A PowerShell 5.1-ben és újabb verziókban megtudhatja, hogy melyik kiadást futtatja az $PSEdition automatikus változóval:
$PSEdition
Core
A PowerShell 4-ben és alatta ez a változó nem létezik.
$PSEdition null értéket ugyanúgy kell kezelni, mint a Desktopértéket.
Kiadás $PSVersionTable
Az $PSVersionTable automatikus változó PSEdition tulajdonságot is tartalmazza a PowerShell 5.1-ben és újabb verziókban:
$PSVersionTable
Name Value
---- -----
PSVersion 7.3.9
PSEdition Core
GitCommitId 7.3.9
OS Microsoft Windows 10.0.22621
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
A PSEdition mező értéke megegyezik az $PSEdition automatikus változó értékével.
A CompatiblePSEditions modul jegyzékmezője
A PowerShell-modulok deklarálhatják, hogy a PowerShell mely kiadásai kompatibilisek a moduljegyzék CompatiblePSEditions mezőjének használatával.
Például egy moduljegyzék, amely a PowerShell Desktop és Core kiadásával is kompatibilitást deklarál:
@{
ModuleVersion = '1.0'
FunctionsToExport = @('Test-MyModule')
CompatiblePSEditions = @('Desktop', 'Core')
}
Példa egy csak Desktop kompatibilitással rendelkező moduljegyzékre:
@{
ModuleVersion = '1.0'
FunctionsToExport = @('Test-MyModule')
CompatiblePSEditions = @('Desktop')
}
A CompatiblePSEditions mező kihagyása a moduljegyzékből ugyanazzal a hatással lesz, mint a Desktopbeállítása, mivel a mező bevezetése előtt létrehozott modulok implicit módon erre a kiadásra lettek írva.
Az Windows részeként nem szállított modulok (azaz a katalógusból írt vagy telepített modulok) esetében ez a mező csak tájékoztató jellegű; A PowerShell nem módosítja a viselkedést a CompatiblePSEditions mező alapján, de a PSModuleInfo objektumon (a Get-Module által visszaadott) objektumon teszi elérhetővé a saját logikájához:
$newModuleManifestSplat = @{
Path = '.\TestModuleWithEdition.psd1'
CompatiblePSEditions = 'Desktop', 'Core'
PowerShellVersion = '5.1'
}
New-ModuleManifest @newModuleManifestSplat
$ModuleInfo = Test-ModuleManifest -Path .\TestModuleWithEdition.psd1
$ModuleInfo.CompatiblePSEditions
Desktop
Core
Jegyzet
A CompatiblePSEditions modulmező csak a PowerShell 5.1-gyel és újabb verzióval kompatibilis. Ha ezt a mezőt is beleszámítjuk, akkor egy modul nem kompatibilis a PowerShell 4-gyel és az alábbi verzióval. Mivel a mező tisztán tájékoztató jellegű, a későbbi PowerShell-verziókban biztonságosan kihagyható.
A PowerShell 6.1-ben a Get-Module -ListAvailable frissítette a formázóját az egyes modulok kiadáskompatibilitásának megjelenítéséhez:
Get-Module -ListAvailable
Directory: C:\Users\me\Documents\PowerShell\Modules
ModuleType Version Name PSEdition ExportedCommands
---------- ------- ---- --------- ----------------
Script 1.4.0 Az Core,Desk
Script 1.3.1 Az.Accounts Core,Desk {Disable-AzDataCollection, Disable-AzContextAutosave, E...
Script 1.0.1 Az.Aks Core,Desk {Get-AzAks, New-AzAks, Remove-AzAks, Import-AzAksCreden...
...
Script 4.4.0 Pester Desk {Describe, Context, It, Should...}
Script 1.18.0 PSScriptAnalyzer Desk {Get-ScriptAnalyzerRule, Invoke-ScriptAnalyzer, Invoke-...
Script 1.0.0 WindowsCompatibility Core {Initialize-WinSession, Add-WinFunction, Invoke-WinComm...
Kiadáskompatibilitás a Windows részeként szállított modulokhoz
Az Windows részeként (vagy szerepkör vagy funkció részeként telepített) modulok esetében a PowerShell 6.1 és újabb verziói másképp kezelik a CompatiblePSEditions mezőt. Ezek a modulok a Windows PowerShell-rendszermodulok könyvtárában találhatók (%windir%\System\WindowsPowerShell\v1.0\Modules).
Az ebben a könyvtárban betöltött vagy abban található modulok esetében a PowerShell 6.1 és újabb verziók a CompatiblePSEditions mező használatával határozzák meg, hogy a modul kompatibilis lesz-e az aktuális munkamenettel, és ennek megfelelően viselkedik-e.
Ha Import-Module használ, a CoreCompatiblePSEditions nélküli modul nem lesz importálva, és hibaüzenet jelenik meg:
Import-Module BitsTransfer
Import-Module : Module 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\BitsTransfer\BitsTransfer.psd1'
does not support current PowerShell edition 'Core'. Its supported editions are 'Desktop'. Use 'Import-Module
-SkipEditionCheck' to ignore the compatibility of this module.
At line:1 char:1
+ Import-Module BitsTransfer
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (C:\WINDOWS\system32\u2026r\BitsTransfer.psd1:String)
[Import-Module], InvalidOperationException
+ FullyQualifiedErrorId : Modules_PSEditionNotSupported,Microsoft.PowerShell.Commands.ImportModuleCommand
Ha Get-Module -ListAvailable használ, a CoreCompatiblePSEditions nélküli modulok nem jelennek meg:
Get-Module -ListAvailable BitsTransfer
# No output
Mindkét esetben a -SkipEditionCheck[switch] paraméter használható a viselkedés felülbírálásához:
Get-Module -ListAvailable -SkipEditionCheck BitsTransfer
Directory: C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
ModuleType Version Name PSEdition ExportedCommands
---------- ------- ---- --------- ----------------
Manifest 2.0.0.0 BitsTransfer Desk {Add-BitsFile, Complete-BitsTransfer, Get-BitsTransfer,...
Figyelmeztetés
Import-Module -SkipEditionCheck egy modul esetében sikeresnek tűnhet, de a modul használata esetén fennáll annak a kockázata, hogy később kompatibilitási problémákba ütközik; miközben a modul betöltése kezdetben sikeres, egy parancs később inkompatibilis API-t hívhat meg, és spontán meghiúsulhat.
PowerShell-modulok készítése a kiadások keresztkompatibilitásához
Ha PowerShell-modult ír a PowerShell Desktop és Core kiadásainak megcélzásához, a kiadások közötti kompatibilitás biztosítása érdekében számos dolgot tehet.
A kompatibilitás megerősítésének és folyamatos ellenőrzésének egyetlen valódi módja az, ha teszteket ír a szkripthez vagy modulhoz, és futtatja őket a PowerShell összes verziójában és kiadásában, amellyel kompatibilitásra van szüksége. Ehhez ajánlott tesztelési keretrendszer Pester.
PowerShell-szkript
Nyelvként a PowerShell ugyanúgy működik a kiadások között; a kiadáskompatibilitás által érintett parancsmagok, modulok és .NET API-k.
A PowerShell 6.1-ben és újabb verziókban működő szkriptek általában Windows PowerShell 5.1-et használnak, de vannak kivételek.
.NET szerelvények
Ha olyan bináris modult vagy modult ír, amely a forráskódból létrehozott .NET szerelvényeket (DLL-eket) tartalmazza, akkor .NET Standard és PowerShell Standard alapján kell fordítania a .NET és a PowerShell API kompatibilitásának fordítási idő szerinti ellenőrzéséhez.
Bár ezek a kódtárak fordításkor ellenőrizhetik a kompatibilitást, nem fogják tudni észlelni a kiadások közötti lehetséges viselkedésbeli különbségeket. Ehhez továbbra is teszteket kell írnia.