Sdílet prostřednictvím


Moduly s kompatibilními edicemi PowerShellu

Od verze 5.1 je PowerShell k dispozici v různých edicích, které označují různé sady funkcí a kompatibilitu platforem.

  • Verze pro stolní počítače: Je postaven na rozhraní .NET Framework a platí pro prostředí Windows PowerShell verze 4.0 a starší a také pro prostředí Windows PowerShell 5.1 na počítačích se systémem Windows, Windows Server, Windows Server Core a většinu dalších edic systému Windows.
  • Základní edice: Je postavený na .NET Core a platí pro PowerShell 6.0 a novější a také pro Windows PowerShell 5.1 v edicích Windows s menší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ů mohou deklarovat své moduly jako kompatibilní s jednou nebo více edicemi PowerShellu pomocí CompatiblePSEditions klíče manifestu modulu. Tento klíč je podporován pouze v PowerShellu 5.1 nebo novějším.

Poznámka:

Jakmile je manifest modulu zadán pomocí CompatiblePSEditions klíče nebo používá proměnnou $PSEdition , nelze jej importovat do prostředí PowerShell v4 nebo nižšího.

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 seznam filtrovat 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 6 se hodnota používá k rozhodnutí, CompatiblePSEditions zda je modul kompatibilní při importu modulů z $env:windir\System32\WindowsPowerShell\v1.0\Modules. Toto chování platí pouze pro systém Windows. Mimo tento scénář se hodnota používá pouze jako metadata.

Vyhledání kompatibilních modulů

Uživatelé Galerie prostředí PowerShell najdou 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 považují za správné v desktopových edicích PowerShellu.

# 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 verzí

Autoři modulů mohou publikovat jeden modul, který cílí na jednu nebo obě edice PowerShellu (stolní a jádrové).

Jeden modul může fungovat v edicích Desktop i Core, v tom smyslu, že autor modulu musí přidat požadovanou logiku buď do RootModule, nebo do manifestu modulu pomocí $PSEdition proměnné. Moduly mohou mít dvě sady zkompilovaných knihoven DLL, které cílí na CoreCLR i FullCLR. Zde 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 řekl:
  • PSScriptAnalyzer.psm1 řekl:
  • 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
  • Nastavení\CmdletDesign.psd1
  • Nastavení\DSC.psd1
  • Nastavení\ScriptFunctions.psd1
  • Nastavení\ScriptingStyle.psd1
  • Nastavení\ScriptSecurity.psd1

Obsah PSScriptAnalyzer.psd1 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.

Obsah PSScriptAnalyzer.psm1 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: Použití proměnné $PSEdition v souboru PSD1 k načtení správných knihoven DLL

V PS 5.1 nebo novější $PSEdition je v souboru manifestu modulu povolena globální proměnná. Pomocí této proměnné může autor modulu zadat podmíněné hodnoty v souboru manifestu modulu. $PSEdition lze odkazovat v omezeném jazykovém režimu nebo v části 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

Skripty s úpravami PSEditions

Podpora PSEditions v nástroji PowerShellGallery

Manifest aktualizačního modulu

about_PowerShell_Editions