about_PowerShell_Editions
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 kiadása is 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-keretrendszer fut. A PowerShell 4 és újabb, valamint a PowerShell 5.1 teljes funkcionalitású Windows-kiadásokhoz érhető el, mint például a Windows Desktop, a Windows Server, a 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.
- A .NET Core-on futó Core. 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 kihasználtságú Windows-kiadáson, például a Windows Nano Serveren és a Windows IoT-n, vagy nem Windows-platformokon, például Linuxon és macOS-en.
Mivel a PowerShell kiadása megfelel a .NET-futtatókörnyezetnek, 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
a null értéket ugyanúgy kell kezelni, mint az értéket Desktop
.
Kiadás a következőben: $PSVersionTable
Az $PSVersionTable
automatikus változó P Standard kiadás dition tulajdonságot is használ 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 P Standard kiadás dition 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 CompatiblePSEditions
moduljegyzék mezőinek használatával.
Például egy moduljegyzék, amely a PowerShell mindkét Desktop
verziójával és Core
kiadásával való 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')
}
Ha kihagyja a CompatiblePSEditions
mezőt egy moduljegyzékből, az ugyanolyan hatással lesz, mint a beállításra Desktop
, mivel a mező bevezetése előtt létrehozott modulok implicit módon lettek megírva ehhez a kiadáshoz.
A 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 saját logikája szerint teszi elérhetővé az PSModuleInfo
objektumon (visszaadva):Get-Module
New-ModuleManifest -Path .\TestModuleWithEdition.psd1 -CompatiblePSEditions Desktop,Core -PowerShellVersion '5.1'
$ModuleInfo = Test-ModuleManifest -Path .\TestModuleWithEdition.psd1
$ModuleInfo.CompatiblePSEditions
Desktop
Core
Feljegyzés
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 frissítettük a formátumot az Get-Module -ListAvailable
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
A 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 (%windir%\System\WindowsPowerShell\v1.0\Modules
) találhatók.
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álatban van, a rendszer nem importál egy be CompatiblePSEditions
nem Core
lépő modult, é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
Használat esetén Get-Module -ListAvailable
a be nem Core
CompatiblePSEditions
adott modulok nem jelennek meg:
Get-Module -ListAvailable BitsTransfer
# No output
Mindkét esetben a -SkipEditionCheck
kapcsoló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
a modul 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 mindkét Desktop
és Core
kiadásának 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 a Pester.
PowerShell-szkript
Nyelvként a PowerShell ugyanúgy működik a kiadások között; a kiadások kompatibilitása által érintett parancsmagok, modulok és .NET API-k.
A PowerShell 6.1-ben és újabb verziókban működő szkriptek általában a Windows PowerShell 5.1-ben működnek, de vannak kivételek.
A PSScriptAnalyzer 1.18+-os verziója olyan szabályokkal rendelkezik, mint a PSUseCompatibleCommands és a PSUseCompatibleTypes , amelyek képesek észlelni a parancsok és a .NET API-k esetleg nem kompatibilis használatát a PowerShell-szkriptekben.
.NET-szerelvények
Ha olyan bináris modult vagy modult ír, amely a forráskódból létrehozott .NET-szerelvényeket (DLL-eket) tartalmaz, a .NET Standard és a 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.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: