Aracılığıyla paylaş


Uyumlu PowerShell Sürümlerine sahip modüller

Sürüm 5.1'den başlayarak, PowerShell, farklı özellik setlerini ve platform uyumluluğunu ifade eden farklı sürümlerde mevcuttur.

  • Masaüstü Sürümü: .NET Framework üzerine kuruludur, Windows PowerShell v4.0 ve altı sürümlerin yanı sıra Windows Masaüstü, Windows Server, Windows Server Core ve diğer birçok Windows sürümünde Windows PowerShell 5.1 için geçerlidir.
  • Çekirdek Sürümü: .NET Core üzerine kuruludur, PowerShell 6.0 ve üzeri sürümlerin yanı sıra Windows IoT ve Windows Nano Server gibi daha az yer kaplayan Windows Sürümlerinde Windows PowerShell 5.1 için de geçerlidir.

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

Uyumlu sürümleri bildirme

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

Uyarı

Modül bildirimi anahtarla CompatiblePSEditions belirtildikten veya değişkeni $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 'den $env:windir\System32\WindowsPowerShell\v1.0\Modulesiçeri aktarıldığında bir modülün CompatiblePSEditions uyumlu olup olmadığına karar vermek için değer kullanılır. Bu davranış yalnızca Windows için geçerlidir. Bu senaryonun 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 Edition'da 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 fazla sürümü hedefleme

Modül yazarları, PowerShell sürümlerinden birini veya her ikisini de (Masaüstü ve Çekirdek) hedefleyen tek bir modül yayımlayabilir.

Tek bir modül hem Masaüstü hem de Core sürümlerinde çalışabilir, bu modülde yazarın RootModule'e 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ükleme mantığına sahip paketleme seçenekleri aşağıdadır.

1. Seçenek: PowerShell'in birden çok sürümünü ve birden çok sürümünü hedeflemek için 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
  • Ayarlar\CmdletDesign.psd1
  • Ayarlar\DSC.psd1
  • Ayarlar\ScriptFunctions.psd1
  • Ayarlar\ScriptingStyle.psd1
  • Ayarlar\ScriptSecurity.psd1

Dosyanın PSScriptAnalyzer.psd1 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
}

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

PS 5.1 veya daha yeni sürümlerde, $PSEdition modül bildirim dosyasında global 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şvurulabilir.

Anahtarlı 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

Diğer ayrıntılar

PSEditions içeren komut dosyaları

PowerShellGallery'de PSEditions desteği

Modül bildirimini güncelleştirme

about_PowerShell_Editions