Megosztás a következőn keresztül:


Kompatibilis PowerShell-kiadásokkal rendelkező modulok

Az 5.1-es verziótól kezdődően a PowerShell különböző kiadásokban érhető el, amelyek különböző funkciókészleteket és platformkompatibilitást jelölnek.

  • Asztali kiadás: NET-keretrendszerre épül, a Windows PowerShell 4.0-s és régebbi verzióira, valamint a Windows PowerShell 5.1-re vonatkozik a Windows Desktop, a Windows Server, a Windows Server Core és a legtöbb más Windows-kiadás rendszeren.
  • Core kiadás: A .NET Core-ra épül, a PowerShell 6.0-s és újabb verzióira, valamint a Windows PowerShell 5.1-re vonatkozik a csökkentett helyigényű Windows kiadásokon, például a Windows IoT-n és a Windows Nano Serveren.

További információ a PowerShell-kiadásokról: about_PowerShell_Editions.

Kompatibilis kiadások deklarálása

A modul szerzői a CompatiblePSEditions moduljegyzékkulcs használatával deklarálhatják, hogy a moduljaik kompatibilisek egy vagy több PowerShell-kiadással. Ez a kulcs csak a PowerShell 5.1-es vagy újabb verziójában támogatott.

Megjegyzés:

Miután megadta a moduljegyzéket a kulccsal, CompatiblePSEditions vagy használja a változót $PSEdition , az nem importálható a PowerShell 4-es vagy alacsonyabb verziójára.

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

Az elérhető modulok listájának lekérésekor a PowerShell-kiadás szerint szűrheti a listát.

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

A PowerShell 6-tól kezdődően az CompatiblePSEditions érték alapján dönthető el, hogy egy modul kompatibilis-e a modulok importálásakor $env:windir\System32\WindowsPowerShell\v1.0\Modules. Ez a viselkedés csak a Windows rendszerre vonatkozik. Ezen a forgatókönyvön kívül az érték csak metaadatként használatos.

Kompatibilis modulok keresése

PowerShell-galéria felhasználói a PSEdition_Desktop és PSEdition_Core címkék használatával megtalálhatják az adott PowerShell-kiadásban támogatott modulok listáját.

A PSEdition_Desktop és PSEdition_Core címkék nélküli modulok jól működnek a PowerShell Desktop-kiadásokban.

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

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

Több kiadás megcélzása

A modul szerzői egyetlen modult tehetnek közzé, amely az egyik vagy mindkét PowerShell-kiadásra (Desktop és Core) céloz.

Egyetlen modul asztali és Core kiadáson is működhet, ebben a modul szerzőjének hozzá kell adnia a szükséges logikát a RootModule-ban vagy a moduljegyzékben változó használatával $PSEdition . A modulok két lefordított DLL-készlettel rendelkezhetnek, amelyek a CoreCLR-t és a FullCLR-t is célozzák meg. Itt vannak a csomagolási lehetőségek logikával a megfelelő DLL-ek betöltéséhez.

1. lehetőség: Modul csomagolása a PowerShell több verziójának és több kiadásának megcélzásához

Modulmappa tartalma

  • 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
  • Beállítások\CmdletDesign.psd1
  • Beállítások\DSC.psd1
  • Beállítások\ScriptFunctions.psd1
  • Beállítások\ScriptingStyle.psd1
  • Beállítások\ScriptSecurity.psd1

A fájl tartalma PSScriptAnalyzer.psd1

@{

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

# ---
}

Az alábbi logika az aktuális kiadástól vagy verziótól függően betölti a szükséges szerelvényeket.

A fájl tartalma PSScriptAnalyzer.psm1 :

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

2. lehetőség: Használja $PSEdition változót a PSD1 fájlban a megfelelő DLL-ek betöltéséhez

A PS 5.1-es vagy újabb verzióiban a $PSEdition globális változó engedélyezett a moduljegyzékfájlban. Ezzel a változóval a modul szerzője megadhatja a feltételes értékeket a moduljegyzékfájlban. $PSEdition változóra korlátozott nyelvi módban vagy adatszakaszban lehet hivatkozni.

Mintamodul jegyzékfájlja kulccsal CompatiblePSEditions .

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

Modul tartalma

  • 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

További részletek

Szkriptek PSEditions-szal

PSEditions támogatás a PowerShellGallery

Moduljegyzék frissítése

about_PowerShell_Editions