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\Modules
iç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
PowerShellGallery'de PSEditions desteği
PowerShell Gallery