Moduly s kompatibilními edicemi PowerShellu
Od verze 5.1 je PowerShell dostupný v různých edicích, které označují různé sady funkcí a kompatibilitu platforem.
- Desktop Edition: Je založený na rozhraní .NET Framework a vztahuje se na Windows PowerShell verze 4.0 a nižší a také na Windows PowerShell 5.1 pro Windows Desktop, Windows Server, Windows Server Core a většinu dalších edic Windows.
- Core Edition: Vychází z .NET Core a vztahuje se na PowerShell 6.0 a novější a také na Windows PowerShell 5.1 v edicích Windows s nižšími nároky, jako jsou Windows IoT a Windows Nano Server.
Další informace o edicích PowerShellu najdete v tématu about_PowerShell_Editions.
Deklarace kompatibilních edic
Autoři modulů můžou deklarovat své moduly jako kompatibilní s jednou nebo více edicemi PowerShellu pomocí klíče manifestu CompatiblePSEditions
modulu. Podporu tohoto klíče poskytují jenom prostředí PowerShell 5.1 nebo novější.
Poznámka
Jakmile se manifest modulu zadá pomocí CompatiblePSEditions
klíče nebo použije $PSEdition
proměnnou, nedá se importovat v PowerShellu verze 4 nebo nižší.
New-ModuleManifest -Path .\TestModuleWithEdition.psd1 -CompatiblePSEditions Desktop,Core -PowerShellVersion 5.1
$ModuleInfo = Test-ModuleManifest -Path .\TestModuleWithEdition.psd1
$ModuleInfo.CompatiblePSEditions
Desktop
Core
$ModuleInfo | Get-Member CompatiblePSEditions
TypeName: System.Management.Automation.PSModuleInfo
Name MemberType Definition
---- ---------- ----------
CompatiblePSEditions Property System.Collections.Generic.IEnumerable[string] CompatiblePSEditions {get;}
Při získávání seznamu dostupných modulů můžete filtrovat seznam podle edice PowerShellu.
Get-Module -ListAvailable -PSEdition Desktop
Directory: C:\Program Files\WindowsPowerShell\Modules
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Manifest 1.0 ModuleWithPSEditions
Get-Module -ListAvailable -PSEdition Core | % CompatiblePSEditions
Desktop
Core
Počínaje PowerShellem CompatiblePSEditions
6 se hodnota používá k určení, jestli je modul kompatibilní při importu modulů z $env:windir\System32\WindowsPowerShell\v1.0\Modules
.
Toto chování platí jenom pro Windows. Mimo tento scénář se hodnota používá pouze jako metadata.
Vyhledání kompatibilních modulů
Galerie prostředí PowerShell uživatelé můžou najít seznam modulů podporovaných v konkrétní edici PowerShellu pomocí značek PSEdition_Desktop a PSEdition_Core.
Moduly bez značek PSEdition_Desktop a PSEdition_Core se v edicích PowerShell Desktopu považují za funkční.
# Find modules supported on PowerShell Desktop edition
Find-Module -Tag PSEdition_Desktop
# Find modules supported on PowerShell Core editions
Find-Module -Tag PSEdition_Core
Cílení na více edicí
Autoři modulů můžou publikovat jeden modul, který cílí na jednu nebo obě edice PowerShellu (Desktop a Core).
Jeden modul může fungovat v edicích Desktop i Core. V daném modulu musí autor modulu přidat požadovanou logiku buď v RootModule, nebo v manifestu modulu pomocí $PSEdition
proměnné. Moduly můžou mít dvě sady kompilovaných knihoven DLL, které cílí na CoreCLR i FullCLR. Tady jsou možnosti balení s logikou pro načítání správných knihoven DLL.
Možnost 1: Balení modulu pro cílení na více verzí a více edicí PowerShellu
Obsah složky modulu
- Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
- Microsoft.Windows.PowerShell.ScriptAnalyzer.dll
- PSScriptAnalyzer.psd1
- PSScriptAnalyzer.psm1
- ScriptAnalyzer.format.ps1xml
- ScriptAnalyzer.types.ps1xml
- coreclr\Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
- coreclr\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll
- en-US\about_PSScriptAnalyzer.help.txt
- en-US\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll-Help.xml
- PSv3\Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
- PSv3\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll
- Settings\CmdletDesign.psd1
- Settings\DSC.psd1
- Nastavení\ScriptFunctions.psd1
- Settings\ScriptingStyle.psd1
- Settings\ScriptSecurity.psd1
PSScriptAnalyzer.psd1
Obsah souboru
@{
# Author of this module
Author = 'Microsoft Corporation'
# Script module or binary module file associated with this manifest.
RootModule = 'PSScriptAnalyzer.psm1'
# Version number of this module.
ModuleVersion = '1.6.1'
# ---
}
Níže uvedená logika načte požadovaná sestavení v závislosti na aktuální edici nebo verzi.
PSScriptAnalyzer.psm1
Obsah souboru:
#
# Script module for module 'PSScriptAnalyzer'
#
Set-StrictMode -Version Latest
# Set up some helper variables to make it easier to work with the module
$PSModule = $ExecutionContext.SessionState.Module
$PSModuleRoot = $PSModule.ModuleBase
# Import the appropriate nested binary module based on the current PowerShell version
$binaryModuleRoot = $PSModuleRoot
if (($PSVersionTable.Keys -contains "PSEdition") -and ($PSVersionTable.PSEdition -ne 'Desktop')) {
$binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'coreclr'
}
else
{
if ($PSVersionTable.PSVersion -lt [Version]'5.0')
{
$binaryModuleRoot = Join-Path -Path $PSModuleRoot -ChildPath 'PSv3'
}
}
$binaryModulePath = Join-Path -Path $binaryModuleRoot -ChildPath 'Microsoft.Windows.PowerShell.ScriptAnalyzer.dll'
$binaryModule = Import-Module -Name $binaryModulePath -PassThru
# When the module is unloaded, remove the nested binary module that was loaded with it
$PSModule.OnRemove = {
Remove-Module -ModuleInfo $binaryModule
}
Možnost 2: Načtení správných knihoven DLL pomocí proměnné $PSEdition v souboru PSD1
V SYSTÉMU PS 5.1 nebo novějším $PSEdition
je v souboru manifestu modulu povolená globální proměnná. Pomocí této proměnné může autor modulu zadat podmíněné hodnoty v souboru manifestu modulu. $PSEdition
proměnnou lze odkazovat v režimu omezeného jazyka nebo v oddílu Data.
Ukázkový soubor manifestu modulu s CompatiblePSEditions
klíčem
@{
# Script module or binary module file associated with this manifest.
RootModule = if($PSEdition -eq 'Core')
{
'coreclr\MyCoreClrRM.dll'
}
else # Desktop
{
'clr\MyFullClrRM.dll'
}
# Supported PSEditions
CompatiblePSEditions = 'Desktop', 'Core'
# Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
NestedModules = if($PSEdition -eq 'Core')
{
'coreclr\MyCoreClrNM1.dll',
'coreclr\MyCoreClrNM2.dll'
}
else # Desktop
{
'clr\MyFullClrNM1.dll',
'clr\MyFullClrNM2.dll'
}
}
Obsah modulu
- ModuleWithEditions\ModuleWithEditions.psd1
- ModuleWithEditions\clr\MyFullClrNM1.dll
- ModuleWithEditions\clr\MyFullClrNM2.dll
- ModuleWithEditions\clr\MyFullClrRM.dll
- ModuleWithEditions\coreclr\MyCoreClrNM1.dll
- ModuleWithEditions\coreclr\MyCoreClrNM2.dll
- ModuleWithEditions\coreclr\MyCoreClrRM.dll
Další podrobnosti
PowerShell Gallery