Yüklü PowerShell Sürümü Nasıl Kontrol Edilir?


Bu yazıda hangi PowerShell sürümlerinin var olduğunu, aralarındaki farkın ne olduğunu öğreneceğiz.

Windows PowerShell

Ve

PowerShell Core

ve yerel veya uzak bilgisayarda yüklü PowerShell sürümünün nasıl kontrol edileceği.

Windows PowerShell ve PowerShell Çekirdeğinin Geçmişi ve Sürümleri

PowerShell, Windows 7 SP1 ve Windows Server 2008 R2 SP1'den başlayarak tüm Windows sürümlerinde varsayılan olarak yüklenir. Aşağıdaki tabloda, tüm PowerShell sürümlerinin listesi gösterilmektedir:

PowerShell 1.0

Windows Server 2003 SP1 ve Windows XP'ye manuel olarak kurulabilir

PowerShell 2.0

Windows Server 2008 R2 ve Windows 7

PowerShell 3.0

Windows 8 ve Windows Server 2012

PowerShell 4.0

Windows 8.1 ve Windows Server 2012 R2

PowerShell 5.0

Windows 10 RTM'ye önceden yüklenmiştir ve Windows Update aracılığıyla otomatik olarak 5.1'e güncellenir

PowerShell 5.1

Windows 10 (Build 1709'dan başlayarak) ve Windows Server 2016'da yerleşiktir.

PowerShell Core 6.0 / 6.1

Desteklenen tüm Windows sürümlerine ve MacOS, CentOS, RHEL, Debian, Ubuntu, openSUSE'ye yüklenebilen bir sonraki platformlar arası PowerShell sürümüdür (.NET Core tabanlı).

PowerShell Core 7.0

Mart 2020'de yayınlanan en son PowerShell sürümüdür (içinde .NET Core 2.x yerine .NET Core 3.1 kullanılmıştır)

Önceki Windows sürümlerinde daha yeni bir PowerShell sürümünü manuel olarak yükleyebilirsiniz. Bunu yapmak için Windows Management Framework'ün uygun sürümünü indirip yükleyin (PowerShell bunun bir parçasıdır).

Son 2 yılda Microsoft'un klasik Windows PowerShell'in geliştirilmesini askıya aldığını (yalnızca hata düzeltmeleri ve güvenlik güncellemeleri yayınlanır) ve açık kaynaklı çapraz platform PowerShell Core'a odaklandığını belirtmekte fayda var.

Windows PowerShell ve PowerShell Core arasındaki fark nedir?

  1. Windows PowerShell, .NET Framework tabanlıdır (örneğin, PowerShell 5, .NET Framework v4.5 gerektirir, kurulu olduğundan emin olun). PowerShell Core, .Net Core'u temel alır;

  2. Windows PowerShell yalnızca Windows işletim sistemlerinde çalışır, PowerShell Core ise platformlar arasıdır ve Linux'ta da çalışabilir;

  3. PowerShell Core, Windows PowerShell ile tam olarak uyumlu değildir, ancak Microsoft, önceki PS cmdlet'leri ve betikleri ile geriye dönük uyumluluğun iyileştirilmesi üzerinde çalışmaktadır. (PowerShell Core'a geçmeden önce eski PS1 betiklerinizi test etmeniz önerilir). PowerShell Core 7, Windows PowerShell ile en yüksek uyumluluğu sağlar;

  4. PowerShell Core betiklerini düzenlemek için PowerShell ISE Düzenleyicisini kullanamazsınız (ancak Visual Studio Code kullanılabilir);

  5. Windows PowerShell artık geliştirilmediğinden, PowerShell Core'a geçiş yapmaya başlamanız önerilir.

Konsoldan PowerShell Sürümü Nasıl Alınır?

Bilgisayarınızda hangi PowerShell sürümünün yüklü olduğunu öğrenmenin en kolay yolu şu komutu kullanmaktır:

host

Sürüm özellik değerini kontrol edin.

Aşağıdaki ekran görüntüsü, Windows Server 2016'da olduğu gibi varsayılan olarak PowerShell 5.1'in kurulu olduğu Windows 10'da yapılmıştır.

veya

$PSVersionTable

Yalnızca PowerShell sürüm değerini alabilirsiniz:

$PSVersionTable.PSVersion.major

(bu örnekte temiz Windows Server 2008 R2'de PSVersion 2.0 aldık)

$PSVersionTable komutu, farklı işletim sistemlerinde PowerShell Core'da doğru şekilde çalışır.

Yüklü PowerShell sürümünü kayıt defterinden de öğrenebilirsiniz. Bunu yapmak için, kayıt defteri anahtarındaki PowerShellVersion parametresinin değerini alın.

HKLM\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine

Get-ItemProperty cmdlet'ini kullanarak:

(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\3\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

Yukarıda açıklanan yöntem, Windows Server 2012/Windows 8 veya daha yeni sürümlerde çalışır.

Windows Server 2008 R2/Windows 7'de, kayıt defteri parametresinin değerini başka bir kayıt anahtarında alabilirsiniz:

(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellEngine -Name 'PowerShellVersion').PowerShellVersion

Yüklü PowerShell Core sürümünü almak için aşağıdaki komutu kullanın:

(Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PowerShellCore\InstalledVersions* -Name 'SemanticVersion').SemanticVersion

Uzak Bilgisayarlardaki PowerShell Sürümünü Kontrol Edin

Uzak ana bilgisayardaki PowerShell sürümünü kontrol etmek için $PSVersionTable ortam değişkeninin değerini kullanın veya bilgileri doğrudan kayıt defterinden alın. Diğer yöntemler hatalı veri döndürebilir.

PowerShell sürümünü, Invoke-Command cmdlet'i kullanarak PowerShell Remoting aracılığıyla uzak bir bilgisayara yükleyebilirsiniz:

Invoke-Command -ComputerName mun-dc01 -ScriptBlock {$PSVersionTable.PSVersion} -Credential $cred

Major Minor Build Revision PSComputerName
----- ----- ----- -------- --------------
5 1 14393 3383 mun-dc01

Yüklü PowerShell sürümlerini aşağıdaki betiği kullanarak birden çok bilgisayarda edinebilirsiniz (uzak bilgisayarların listesi düz metin dosyası olarak belirtilmelidir):

Invoke-Command -ComputerName (Get-Content C:\PS\host_list.txt) -
ScriptBlock{$PSVersionTable.PSVersion} | Select PSComputerName, @{N="PS Version";E={$_.Major}}

Veya Get-ADComputer aracılığıyla etki alanı bilgisayarlarının bir listesini alabilir ve bunlardaki PowerShell sürümlerini uzaktan kontrol edebilirsiniz:

$adcomputer=(Get-ADComputer -Filter 'operatingsystem -like "*Windows server*" -and enabled -eq "true"' -SearchBase ‘OU=servers,OU=Munich,dc=a-d,dc=com’ ).Name
Invoke-Command-ComputerName $adcomputer -Scriptblock{$PSVersionTable.psversion} -ErrorAction SilentlyContinue

PowerShell betiğiniz belirli bir PS sürümünün özelliklerini kullanıyorsa betiğinizi farklı bir PowerShell sürümüne geçmeye zorlayabilirsiniz. Örneğin, bir konsolu PowerShell v3 modunda çalıştırmak için şu komutu çalıştırın (.Net Framework 3.5 kurulu olmalıdır):

PowerShell.exe -version 3

Belirli bir PS sürümünün cmdlet'lerini veya özelliklerini kullanan betikler veya komutlar çalıştırıyorsanız, PowerShell sürümünüzü bilmek önemli olabilir. Komut dosyasında kurulu PowerShell sürümünü algılamak ve buna dayalı cmdlet'ler kullanmak istiyorsanız, aşağıdaki PS komut dosyasını çalıştırabilirsiniz:

$ps_version = $PSVersionTable.PSVersion.major
if ( $ps_version -eq "2” )
{
write "You are using Powershell 2.0"
}
elseif ( $ps_version -eq "5" )
{
write " You are using Powershell 5"
}

Bir sonraki makalede, Windows'ta PowerShell sürümünün nasıl güncelleneceğine bir göz atacağız.

İlgili makaleler