Uyumlu PowerShell Sürümlerine sahip modüller

Sürüm 5.1'den başlayarak PowerShell, farklı özellik kümelerini ve platform uyumluluğunu belirten farklı sürümlerde kullanılabilir.

  • Masaüstü Sürümü: .NET Framework'da yerleşik olarak Windows PowerShell v4.0 ve altı sürümlerin yanı sıra Windows Masaüstü, Windows Server, Windows Server Core ve diğer çoğu Windows sürümündeki Windows PowerShell 5.1 için geçerlidir.
  • Core Edition: .NET Core'da yerleşik olarak, Hem PowerShell 6.0 ve üzeri hem de Windows IoT ve Windows Nano Server gibi daha az kaplanmış Windows Sürümleri üzerinde Windows PowerShell 5.1 için geçerlidir.

PowerShell sürümleri hakkında daha fazla bilgi için bkz. about_PowerShell_Editions.

Uyumlu sürümleri bildirme

Modül yazarları modül bildirim anahtarını kullanarak CompatiblePSEditions modüllerinin bir veya daha fazla PowerShell sürümüyle uyumlu olduğunu bildirebilir. Bu anahtar yalnızca PowerShell 5.1 veya üstünde desteklenir.

Not

Anahtarla CompatiblePSEditions birlikte bir modül bildirimi belirtildikten veya değişkenini $PSEdition kullandıktan sonra PowerShell v4 veya daha düşük bir sürüme aktarılamaz.

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

Kullanılabilir modüllerin listesini alırken, listeyi PowerShell sürümüne göre filtreleyebilirsiniz.

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

PowerShell 6'dan başlayarak, modüller uygulamasından CompatiblePSEditions$env:windir\System32\WindowsPowerShell\v1.0\Modulesiçeri aktarıldığında modülün uyumlu olup olmadığını belirlemek için bu değer kullanılır. Bu davranış yalnızca Windows için geçerlidir. Bu senaryo dışında değer yalnızca meta veri olarak kullanılır.

Uyumlu modülleri bulma

PowerShell Galerisi kullanıcılar, PSEdition_Desktop ve PSEdition_Core etiketlerini kullanarak belirli bir PowerShell Sürümünde desteklenen modüllerin listesini bulabilir.

PSEdition_Desktop ve PSEdition_Core etiketleri olmayan modüllerin PowerShell Desktop sürümlerinde düzgün çalıştığı kabul edilir.

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

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

Birden çok sürümü hedefleme

Modül yazarları, PowerShell sürümlerine (Desktop ve Core) yönelik tek bir modül yayımlayabilir.

Tek bir modül hem Desktop hem de Core sürümlerinde çalışabilir; bu modüldeki yazarın RootModule'a veya değişken kullanarak $PSEdition modül bildirimine gerekli mantığı eklemesi gerekir. Modüller hem CoreCLR hem de FullCLR'yi hedefleyen iki derlenmiş DLL kümesine sahip olabilir. Uygun DLL'leri yüklemek için mantığa sahip paketleme seçenekleri aşağıda verilmiştir.

1. Seçenek: PowerShell'in birden çok sürümünü ve birden çok sürümünü hedeflemek için bir modülü paketleme

Modül klasörü içeriği

  • 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
  • Settings\ScriptFunctions.psd1
  • Settings\ScriptingStyle.psd1
  • Settings\ScriptSecurity.psd1

PSScriptAnalyzer.psd1 Dosyanın içeriği

@{

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

# ---
}

Aşağıdaki mantık, geçerli sürüme veya sürüme bağlı olarak gerekli derlemeleri yükler.

Dosyanın içeriği 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
}

Seçenek 2: Uygun DLL'leri yüklemek için PSD1 dosyasındaki $PSEdition değişkenini kullanın

PS 5.1 veya daha yeni sürümlerde modül $PSEdition bildirim dosyasında genel değişkene izin verilir. Modül yazarı bu değişkeni kullanarak modül bildirim dosyasındaki koşullu değerleri belirtebilir. $PSEdition değişkenine kısıtlı dil modunda veya Veri bölümünde başvurulabiliyor.

Anahtar içeren CompatiblePSEditions örnek modül bildirim dosyası.

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

Modül içeriği

  • 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

Daha fazla ayrıntı’yı seçin

PSEditions’ı olan Betikler

PowerShellGallery'de PSEditions desteği

Modül bildirimini güncelleştir

about_PowerShell_Editions