Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Kısa açıklama
PowerShell'in farklı sürümleri farklı temel çalışma zamanlarında çalıştırılır.
Uzun açıklama
PowerShell 5.1'de, her biri farklı bir .NET çalışma zamanında çalışan powershell birden çok sürümü vardır. PowerShell 6.0 sürümünden itibaren PowerShell'in iki sürümü vardır:
- .NET Framework üzerinde çalışan Masaüstü . PowerShell 4 ve altı sürümlerin yanı sıra PowerShell 5.1, Windows Masaüstü, Windows Server, Windows Server Core ve diğer Windows işletim sistemlerinin çoğu gibi tam özellikli Windows sürümlerinde kullanılabilir. Bu, özgün PowerShell sürümüdür ve işletim sisteminin varsayılan yüklemesine dahil edilir.
- .NET Core üzerinde çalışan Core. PowerShell 6.0 ve üzeri, tam özellikli Windows sürümlerinde, Windows Nano Server ve Windows IoT gibi bazı azaltılmış ayak izi Windows sürümlerinde veya Linux ve macOS gibi Windows dışı platformlarda önceki PowerShell sürümleriyle yan yana yüklenir.
PowerShell sürümü .NET çalışma zamanına karşılık geldiği için ,NET API ve PowerShell modülü uyumluluğunun birincil göstergesidir; bazı .NET API'leri, türleri veya yöntemleri hem .NET çalışma zamanlarında kullanılamaz hem de bu, bunlara bağlı PowerShell betiklerini ve modüllerini etkiler.
Otomatik $PSEdition değişken
PowerShell 5.1 ve üzeri sürümlerde, $PSEdition otomatik değişkeniyle hangi sürümü çalıştırdığınızı öğrenebilirsiniz:
$PSEdition
Core
PowerShell 4 ve altında bu değişken yoktur. null olan $PSEdition, değerinin Desktopolduğu gibi kabul edilmelidir.
$PSVersionTable'da sürüm
$PSVersionTable otomatik değişkeni, PowerShell 5.1 ve üzeri PSEdition özelliğine de sahiptir:
$PSVersionTable
Name Value
---- -----
PSVersion 7.3.9
PSEdition Core
GitCommitId 7.3.9
OS Microsoft Windows 10.0.22621
Platform Win32NT
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
PSEdition alanı, $PSEdition otomatik değişkeniyle aynı değere sahiptir.
Modül CompatiblePSEditions bildirim alanı
PowerShell modülleri, modül bildiriminin CompatiblePSEditions alanını kullanarak hangi PowerShell sürümleriyle uyumlu olduklarını bildirebilir.
Örneğin, PowerShell'in hem Desktop hem de Core sürümleriyle uyumluluğu belirten bir modül bildirimi:
@{
ModuleVersion = '1.0'
FunctionsToExport = @('Test-MyModule')
CompatiblePSEditions = @('Desktop', 'Core')
}
Yalnızca Desktop uyumluluğu olan bir modül bildirimi örneği:
@{
ModuleVersion = '1.0'
FunctionsToExport = @('Test-MyModule')
CompatiblePSEditions = @('Desktop')
}
Bu alan kullanılmadan önce oluşturulan modüller bu sürüm için örtülü olarak yazıldığı için, CompatiblePSEditions alanının bir modül bildiriminden çıkarılmış olması, Desktopolarak ayarlanmasıyla aynı etkiye sahip olacaktır.
Windows'un bir parçası olarak gönderilmeyen modüller (galeriden yazdığınız veya yüklediğiniz modüller) için bu alan yalnızca bilgilendirme amaçlıdır; PowerShell, CompatiblePSEditions alanı temelinde davranışı değiştirmez, ancak kendi mantığınız için PSModuleInfo nesnesinde (Get-Moduletarafından döndürülen) kullanıma sunar:
$newModuleManifestSplat = @{
Path = '.\TestModuleWithEdition.psd1'
CompatiblePSEditions = 'Desktop', 'Core'
PowerShellVersion = '5.1'
}
New-ModuleManifest @newModuleManifestSplat
$ModuleInfo = Test-ModuleManifest -Path .\TestModuleWithEdition.psd1
$ModuleInfo.CompatiblePSEditions
Desktop
Core
Not
CompatiblePSEditions modülü alanı yalnızca PowerShell 5.1 ve üzeri ile uyumludur. Bu alanı dahil etmek, bir modülün PowerShell 4 ve altıyla uyumsuz olmasına neden olur. Alan tamamen bilgilendirme amaçlı olduğundan, sonraki PowerShell sürümlerinde güvenle atlanabilir.
PowerShell 6.1'de Get-Module -ListAvailable, her modülün sürüm uyumluluğunu görüntülemek için biçimlendiricisini güncelleştirdi:
Get-Module -ListAvailable
Directory: C:\Users\me\Documents\PowerShell\Modules
ModuleType Version Name PSEdition ExportedCommands
---------- ------- ---- --------- ----------------
Script 1.4.0 Az Core,Desk
Script 1.3.1 Az.Accounts Core,Desk {Disable-AzDataCollection, Disable-AzContextAutosave, E...
Script 1.0.1 Az.Aks Core,Desk {Get-AzAks, New-AzAks, Remove-AzAks, Import-AzAksCreden...
...
Script 4.4.0 Pester Desk {Describe, Context, It, Should...}
Script 1.18.0 PSScriptAnalyzer Desk {Get-ScriptAnalyzerRule, Invoke-ScriptAnalyzer, Invoke-...
Script 1.0.0 WindowsCompatibility Core {Initialize-WinSession, Add-WinFunction, Invoke-WinComm...
Windows'un bir parçası olarak gelen modüller için sürüm uyumluluğu
Windows'un bir parçası olarak gelen (veya bir rol veya özelliğin parçası olarak yüklenen) modüller için PowerShell 6.1 ve üzeri, CompatiblePSEditions alanını farklı şekilde ele alır. Bu tür modüller Windows PowerShell sistem modülleri dizininde bulunur (%windir%\System\WindowsPowerShell\v1.0\Modules).
Bu dizinden yüklenen veya bu dizinde bulunan modüller için PowerShell 6.1 ve üzeri, modülün geçerli oturumla uyumlu olup olmadığını belirlemek için CompatiblePSEditions alanını kullanır ve uygun şekilde davranır.
Import-Module kullanıldığında, Core'da CompatiblePSEditions olmayan bir modül içeri aktarılmaz ve bir hata görüntülenir:
Import-Module BitsTransfer
Import-Module : Module 'C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules\BitsTransfer\BitsTransfer.psd1'
does not support current PowerShell edition 'Core'. Its supported editions are 'Desktop'. Use 'Import-Module
-SkipEditionCheck' to ignore the compatibility of this module.
At line:1 char:1
+ Import-Module BitsTransfer
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ResourceUnavailable: (C:\WINDOWS\system32\u2026r\BitsTransfer.psd1:String)
[Import-Module], InvalidOperationException
+ FullyQualifiedErrorId : Modules_PSEditionNotSupported,Microsoft.PowerShell.Commands.ImportModuleCommand
Get-Module -ListAvailable kullanıldığında, CoreCompatiblePSEditions olmayan modüller görüntülenmez:
Get-Module -ListAvailable BitsTransfer
# No output
Her iki durumda da, bu davranışı geçersiz kılmak için -SkipEditionCheck anahtar parametresi kullanılabilir:
Get-Module -ListAvailable -SkipEditionCheck BitsTransfer
Directory: C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
ModuleType Version Name PSEdition ExportedCommands
---------- ------- ---- --------- ----------------
Manifest 2.0.0.0 BitsTransfer Desk {Add-BitsFile, Complete-BitsTransfer, Get-BitsTransfer,...
Uyarı
Import-Module -SkipEditionCheck bir modül için başarılı gibi görünebilir, ancak bu modülün kullanılması daha sonra bir uyumsuzlukla karşılaşma riskiyle karşılaşır; modülü yüklenirken başlangıçta başarılı olan bir komut daha sonra uyumsuz bir API çağırabilir ve kendiliğinden başarısız olabilir.
Sürümler arası uyumluluk için PowerShell modülleri yazma
PowerShell'in hem Desktop hem de Core sürümlerini hedeflemek için bir PowerShell modülü yazarken, sürümler arası uyumluluğu sağlamak için yapabileceğiniz şeyler vardır.
Ancak uyumluluğu onaylamanın ve sürekli doğrulamanın tek gerçek yolu, betiğiniz veya modülünüz için testler yazmak ve bunları uyumluluğa ihtiyacınız olan tüm PowerShell sürümlerinde çalıştırmaktır. Bunun için önerilen bir test çerçevesi Pester.
PowerShell betiği
Dil olarak PowerShell, sürümler arasında aynı şekilde çalışır; kullandığınız cmdlet'ler, modüller ve sürüm uyumluluğundan etkilenen .NET API'leridir.
Genel olarak, PowerShell 6.1 ve üzerinde çalışan betikler Windows PowerShell 5.1 ile çalışır, ancak bazı özel durumlar vardır.
PSScriptAnalyzer sürüm 1.18+ PSUseCompatibleCommands ve PSUseCompatibleTypes gibi, PowerShell betiklerinde komutların ve .NET API'lerinin uyumsuz kullanımını algılayabilen kurallar vardır.
.NET derlemeleri
Bir ikili modül veya kaynak koddan oluşturulan .NET derlemelerini (DLL' ler) içeren bir modül yazıyorsanız, .NET ve PowerShell API uyumluluğunun derleme zamanı uyumluluğu doğrulaması için .NET Standard ve PowerShell Standard derlemeniz gerekir.
Bu kitaplıklar derleme zamanında bazı uyumluluğu denetlese de, sürümler arasındaki olası davranış farklılıklarını yakalayamaz. Bunun için yine de testler yazmanız gerekir.
Ayrıca bakınız
- about_Automatic_Variables
- Get-Module
- İçeri Aktarma Modülü
- Uyumlu PowerShell Sürümleri ile Modülleri
PowerShell