Modules met compatibel PowerShell-editiesModules with compatible PowerShell Editions

Vanaf versie 5.1 is PowerShell beschikbaar in verschillende edities die staan voor verschillende functies en platformcompatibiliteit.Starting with version 5.1, PowerShell is available in different editions which denote varying feature sets and platform compatibility.

  • Desktop-editie: deze editie is gebaseerd op .NET Framework en biedt compatibiliteit met scripts en modules die zijn gericht op versies van PowerShell die worden uitgevoerd op edities van Windows met een volledige footprint zoals Server Core en Windows Desktop.Desktop Edition: Built on .NET Framework and provides compatibility with scripts and modules targeting versions of PowerShell running on full footprint editions of Windows such as Server Core and Windows Desktop.
  • Core-editie: deze editie is gebaseerd op .NET Framework en biedt compatibiliteit met scripts en modules die zijn gericht op versies van PowerShell die worden uitgevoerd op edities van Windows met een verminderde footprint zoals Nano Server en Windows IoT.Core Edition: Built on .NET Core and provides compatibility with scripts and modules targeting versions of PowerShell running on reduced footprint editions of Windows such as Nano Server and Windows IoT.

De actieve editie van PowerShell wordt weergegeven in de eigenschap PSEdition van $PSVersionTable.The running edition of PowerShell is shown in the PSEdition property of $PSVersionTable.

$PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14300.1000
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
CLRVersion                     4.0.30319.42000
BuildVersion                   10.0.14300.1000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Auteurs van modules kunnen hun modules zo opstellen dat deze compatibel zijn met een of meer PowerShell-edities door de sleutel voor het modulemanifestbestand CompatiblePSEditions te gebruiken.Module authors can declare their modules to be compatible with one or more PowerShell editions using the CompatiblePSEditions module manifest key. Deze sleutel wordt alleen ondersteund in PowerShell 5.1 of hoger.This key is only supported on PowerShell 5.1 or later.

Opmerking nadat een module-manifest is opgegeven met de sleutel CompatiblePSEditions, deze niet kan worden geïmporteerd in lagere versies van PowerShell.NOTE Once a module manifest is specified with the CompatiblePSEditions key, it can not be imported on lower versions of PowerShell.

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;}

Bij het ophalen van een lijst met beschikbare modules kunt u de lijst filteren op PowerShell-editie.When getting a list of available modules, you can filter the list by PowerShell edition.

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

Module auteurs kunnen een module enkele die gericht is op een of beide PowerShell versies (Desktop en Core) publicerenModule authors can publish a single module targeting to either or both PowerShell editions (Desktop and Core)

Een module enkele Desktop- en Core edities kunt werken, moet in die module auteur vereist logica toevoegen in beide RootModule of in de module-manifest $PSEdition-variabele.A single module can work on both Desktop and Core editions, in that module author has to add required logic in either RootModule or in the module manifest using $PSEdition variable. Modules kunnen twee soorten gecompileerde dll die gericht is op zowel CoreCLR als FullCLR hebben.Modules can have two sets of compiled DLLs targeting both CoreCLR and FullCLR. Hier vindt u het aantal opties voor uw module met logica voor het juiste DLL's laden van het pakket.Here are the couple of options to package your module with logic for loading proper dlls.

Optie 1: Een module gebruiken om meerdere versies en meerdere edities van PowerShell verpakkingOption 1: Packaging a module for targeting multiple versions and multiple editions of PowerShell

Module Mapinhoud weergevenModule folder contents

  • Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dllMicrosoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
  • Microsoft.Windows.PowerShell.ScriptAnalyzer.dllMicrosoft.Windows.PowerShell.ScriptAnalyzer.dll
  • PSScriptAnalyzer.psd1PSScriptAnalyzer.psd1
  • PSScriptAnalyzer.psm1PSScriptAnalyzer.psm1
  • ScriptAnalyzer.format.ps1xmlScriptAnalyzer.format.ps1xml
  • ScriptAnalyzer.types.ps1xmlScriptAnalyzer.types.ps1xml
  • coreclr\Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dllcoreclr\Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
  • coreclr\Microsoft.Windows.PowerShell.ScriptAnalyzer.dllcoreclr\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll
  • en-US\about_PSScriptAnalyzer.help.txten-US\about_PSScriptAnalyzer.help.txt
  • en-US\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll-Help.xmlen-US\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll-Help.xml
  • PSv3\Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dllPSv3\Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules.dll
  • PSv3\Microsoft.Windows.PowerShell.ScriptAnalyzer.dllPSv3\Microsoft.Windows.PowerShell.ScriptAnalyzer.dll
  • Settings\CmdletDesign.psd1Settings\CmdletDesign.psd1
  • Settings\DSC.psd1Settings\DSC.psd1
  • Settings\ScriptFunctions.psd1Settings\ScriptFunctions.psd1
  • Settings\ScriptingStyle.psd1Settings\ScriptingStyle.psd1
  • Settings\ScriptSecurity.psd1Settings\ScriptSecurity.psd1

Inhoud van PSScriptAnalyzer.psd1 bestandContents of PSScriptAnalyzer.psd1 file

@{

# 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'

# ---
}

Inhoud van PSScriptAnalyzer.psm1 bestandContents of PSScriptAnalyzer.psm1 file

Hieronder logica laadt de vereiste assembly's, afhankelijk van de huidige editie of versie.Below logic loads the required assemblies depending on the current edition or version.

#
# 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
} 

Optie 2: $PSEdition-variabele gebruiken in de PSD1-bestand laden van de juiste DLL's en modules geneste/vereistOption 2: Use $PSEdition variable in the PSD1 file to load the proper DLLs and Nested/Required modules

In PS 5.1 of nieuwer, worden de globale variabele $PSEdition is toegestaan in het manifestbestand van de module.In PS 5.1 or newer, $PSEdition global variable is allowed in the module manifest file. Met deze variabele kan opgeven module-auteur de voorwaardelijke waarden in het manifestbestand van de module.Using this variable, module author can specify the conditional values in the module manifest file. $PSEdition variabele kan worden verwezen in de van de beperkte taalmodus of een gegevenssectie.$PSEdition variable can be referenced in restricted language mode or a Data section.

Opmerking zodra een module-manifest wordt opgegeven met de sleutel CompatiblePSEditions of $PSEdition variabele gebruikt, deze niet kan worden geïmporteerd in lagere versies van PowerShell.NOTE Once a module manifest is specified with the CompatiblePSEditions key or uses $PSEdition variable, it can not be imported on lower versions of PowerShell.

Voorbeeld module manifestbestand met CompatiblePSEditions sleutelSample module manifest file with CompatiblePSEditions key

@{ 
# - - -

# 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'
}

# -- - -
}

Module-inhoudModule contents


PS C:\Users\manikb\Documents\WindowsPowerShell\Modules\ModuleWithEditions> dir -Recurse

    Directory: C:\Users\manikb\Documents\WindowsPowerShell\Modules\ModuleWithEditions

Mode                LastWriteTime         Length Name                                                                                
----                -------------         ------ ----                                                                                
d-----         7/5/2016   1:37 PM                clr                                                                                 
d-----         7/5/2016   1:36 PM                coreclr                                                                             
-a----         7/5/2016   1:34 PM           4906 ModuleWithEditions.psd1                                                             

    Directory: C:\Users\manikb\Documents\WindowsPowerShell\Modules\ModuleWithEditions\clr

Mode                LastWriteTime         Length Name                                                                                
----                -------------         ------ ----                                                                                
-a----         7/5/2016   1:35 PM              0 MyFullClrNM1.dll                                                                    
-a----         7/5/2016   1:35 PM              0 MyFullClrNM2.dll                                                                    
-a----         7/5/2016   1:35 PM              0 MyFullClrRM.dl                                                                      

    Directory: C:\Users\manikb\Documents\WindowsPowerShell\Modules\ModuleWithEditions\coreclr

Mode                LastWriteTime         Length Name                                                                                
----                -------------         ------ ----                                                                                
-a----         7/5/2016   1:35 PM              0 MyCoreClrNM1.dll                                                                    
-a----         7/5/2016   1:35 PM              0 MyCoreClrNM2.dll                                                                    
-a----         7/5/2016   1:35 PM              0 MyCoreClrRM.dl                                                                      

Modules zonder tags PSEdition_Desktop en PSEditon_Core worden beschouwd als te werken in PowerShell Desktop-edities.Modules without PSEdition_Desktop and PSEditon_Core tags are considered to work fine on PowerShell Desktop editions.


# Find modules supported on PowerShell Desktop edition
Find-Module -Tag PSEditon_Desktop

# Find modules supported on PowerShell Core editions
Find-Module -Tag PSEditon_Core

meer informatieMore details

Scripts met PSEditionsScripts with PSEditions

Ondersteuning voor PSEditions op PowerShellGalleryPSEditions support on PowerShellGallery

Update module-manifestUpdate module manifest