PowerShell ile Windows'ta Java Sürümü Nasıl Kontrol Edilir veya Güncellenir?


Java Runtime Environment (JRE), kullanıcı bilgisayarlarında farklı kurumsal Java uygulamalarını çalıştırmak için yaygın olarak kullanılır. Ancak, bazı uygulamalar belirli Java sürümünü gerektirir ve diğer sürümlerde hatalı çalışabilir. Bu yazıda, ağınızdaki bilgisayarlarda yüklü Java sürümlerinin nasıl kontrol edileceğini ve PowerShell kullanılarak JRE'nin nasıl kaldırılacağını veya güncelleneceğini tartışacağız.

Windows'ta Java Sürümü Nasıl Kontrol Edilir?

Girerseniz, bilgisayarınızda yüklü olan Java sürüm numarasını alabilirsiniz.

java

Windows 10 arama kutusunda ve Java uygulamasını çalıştırın.

Java Hakkında penceresinde mevcut JRE sürümü belirtilir. benim durumumda, bu

Java Version 8 Update 261 (build 1.8.0_261-b12)

. JRE yapısının değerine dikkat edin. Tüm Java sürümlerinin başında 1 bulunur, ardından ana JRE sürümünün numarası (benim durumumda 8) ve güncelleme numarası gelir.

Geçerli Java sürümünü Windows Program ve Özellikler'den de kontrol edebilirsiniz (Win+R ->

appwiz.cpl

).

Geçerli Java sürümünü komut isteminde görüntüleyebilirsiniz. Koşmak

cmd.exe

ve komutu çalıştırın:

java -version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) Client VM (build 25.261-b12, mixed mode, sharing)

PowerShell kullanarak Java Sürümünü Kontrol Edin

Bilgisayarınızda yüklü olan Java sürümünü PowerShell kullanarak kontrol edebilirsiniz. Yürütülebilir dosyanın sürümünü kontrol edebilirsiniz

java.exe

(bunun yolu, bilgisayarınıza JRE SE yüklendiğinde ortam değişkenlerinde belirlenir). Java dosya sürümünü görüntüleyin:

Get-Command Java | Select-Object Version

Java sürümü, güncelleme ve yayın numarası ile ilgili ayrıntılı bilgileri görüntüleyebilirsiniz:

Get-Command java | Select-Object -ExpandProperty Version
Major Minor Build Revision
----- ----- ----- --------
8 0 2610 12

Betiklerde kullanılmak üzere Java sürümünüzün bir dize değerini almak istiyorsanız, şu komutu kullanın:

(Get-Command java | Select-Object -ExpandProperty Version).tostring()

Java sürümünüzü WMI sınıfı Win32_Product aracılığıyla da öğrenebilirsiniz (Windows'ta yüklü programların listesini içerir):

Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%'"

IdentifyingNumber : {26A24AE4-039D-4CA4-87B4-2F32180261F0}
Name : Java 8 Update 261
Vendor : Oracle Corporation
Version : 8.0.2610.12
Caption : Java 8 Update 261

IdentifyingNumber : {4A03706F-666A-4037-7777-5F2748764D10}
Name : Java Auto Updater
Vendor : Oracle Corporation
Version : 2.8.261.12
Caption : Java Auto Updater

Kimlikler daha sonra JRE'yi doğru şekilde kaldırmak için kullanılabilir.

Yalnızca Java Otomatik Güncelleyici içermeyen Java sürümünü görüntülemek istiyorsanız, aşağıdaki komutu kullanın:

Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%' and not Name like '%Java Auto Updater%'" | Select -Expand Version

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

Alan adınızdaki tüm bilgisayarlarda veya sunucularda kullanılan Java sürümlerini almak istiyorsanız, aşağıdaki PowerShell komut dosyasını kullanabilirsiniz. Komut dosyası, manuel olarak veya bir metin dosyasından girdiğiniz listeye göre tüm sunuculardan bilgileri uzaktan alabilir. RSAT-AD-PowerShell modülünden Get-ADComputer cmdlet'ini kullanarak AD'deki sunucuların veya bilgisayarların listesini de alabilirsiniz.

# PowerShell script to check Java SE (JRE) version on remote computers
# To check Java version on the computers in the list
# $computers = @('mun-sql01,mun-fs01,mun-sql02')
# Check Java version against the list of servers in a text file
#$computers=Get-content C:\PS\ServerList.txt
# To get Java version on all Windows Servers in AD domain
$computers = ((get-adcomputer -Filter { enabled -eq “true” -and OperatingSystem -Like ‘*Windows Server*’ }).name).tostring()
Get-WmiObject  -Class Win32_Product -ComputerName $computers -Filter “Name like ‘%Java%’ and not Name like ‘%Java Auto Updater%'” | Select __Server, Version

Sonuç olarak, bilgisayarların/sunucuların ve üzerlerinde yüklü Java sürümlerinin listesini içeren bir tablonuz olacaktır.

Benim durumumda, etki alanı bilgisayarlarında Java sürümünü kontrol ederken 24 farklı JRE sürümü buldum!!!

Tüm Java Sürümlerini Kaldırmak için PowerShell Komut Dosyası

Neden Windows'ta önceki Java sürümlerini kaldırmanız gerekebilir?

  • Yeni bir Java sürümünü yüklemeden önce, önceki tüm sürümleri kaldırmak daha iyidir. Diğer ürünlerde olduğu gibi Java'da da yeni özellikler ortaya çıkıyor ve kritik açıklardan yararlanma sürekli olarak düzeltiliyor. Java'nın daha eski sürümleri kuruluysa, bilgisayarınız bilinen veya sıfır günlük güvenlik açıklarının bulaşmasına veya bunlardan yararlanılmasına maruz kalır. Java yerleşik bir otomatik güncelleme mekanizmasına sahiptir, ancak farklı nedenlerle yöneticiler onu etki alanı bilgisayarlarında devre dışı bırakabilir.

  • Ücretli Java JRE aboneliğiniz yok. 2019'da Oracle, Java lisanslama politikasını değiştirdi. Önceki Oracle JDK (Java SE) sürümlerini kullanmak istiyorsanız ücretli abonelik almalısınız. 16 Nisan 2019'dan sonraki tüm Java JRE sürümlerine atıfta bulunur (Java 8 SE Güncelleme 211'den).

    Ticari Java SE sürümleri uzun süreli bir desteğe sahiptir (güncellemeler, çıkış tarihinden itibaren 5 yıl boyunca yayınlanır). Ücretsiz bir Java sürümü, Open JDK'dır (GPL altında dağıtılır), ancak her altı ayda bir güncellemeniz gerekir. Diğer bir Open JDK dezavantajı, Windows için uygun bir yükleyiciye sahip olmamasıdır. Open JDK'yı manuel olarak indirmeli ve kurmalısınız. Open JDK'yi WinGet paket yöneticisini kullanarak kurmak için güzel bir seçenek var:

    winget install --id=ojdkbuild.openjdk.11.jdk -e 

Yerel bir bilgisayarda kurulu tüm Java sürümlerini kaldırmak için aşağıdaki PowerShell betiğini kullanabilirsiniz:

$jre_installed = Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%'"
$jre_installed.Uninstall()

Ancak, yukarıdaki kaldırma komutu WMI tabanlıdır ve yavaş çalışır.

Bunun yerine, kayıt defterinden yüklü Java sürümlerinin bir listesini alabilir ve MSI aracılığıyla yazılım yüklediğinizde oluşturulan ürün GUID'lerine göre hepsini kaldırabilirsiniz.


#PowerShell script to uninstall all Java SE (JRE) versions on a computer
$uninstall32 = gci "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" | foreach { gp $_.PSPath } | ? { $_ -like "*Java*" } | select UninstallString
$uninstall64 = gci "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" | foreach { gp $_.PSPath } | ? { $_ -like "*Java*" } | select UninstallString
# Uninstall 64-bit Java versions
if ($uninstall64) {
$uninstall64 = $uninstall64.UninstallString -Replace "msiexec.exe", "" -Replace "/I", "" -Replace "/X", ""
$uninstall64 = $uninstall64.Trim()
Write "Uninstalling Java ..."
start-process "msiexec.exe" -arg "/X $uninstall64 /qb" -Wait
}
# Uninstall 32-bit Java versions
if ($uninstall32) {
$uninstall32 = $uninstall32.UninstallString -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
$uninstall32 = $uninstall32.Trim()
Write "Uninstalling all Java SE versions..."
start-process "msiexec.exe" -arg "/X $uninstall32 /qb" -Wait
}

PowerShell Kullanarak Java JRE Nasıl İndirilir ve Kurulur?

Aşağıdaki PowerShell betiği, Java yükleyicinin en son sürümünü resmi web sitesinden otomatik olarak indirir ve bir bilgisayara yükler (hem çevrimiçi hem de çevrimdışı yükleyiciyi indirebilirsiniz). Yükleme komutu, yeniden başlatma isteğini bastırır ve otomatik Java güncellemelerini devre dışı bırakır.

Web sitesinden bir yükleyici dosyası indirmek için Invoke-WebRequest cmdlet'i kullanılır. Bilgisayarınız bir proxy arkasındaysa, PowerShell'inizi bir proxy sunucusu aracılığıyla İnternet'e erişecek şekilde yapılandırın.

# PowerShell script to automatically download and install the latest Java SE (JRE) version
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# Download an online Java installer
$URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/en/download/manual.jsp).Content | % { [regex]::matches($_, '(?:<a title="Download Java software for Windows Online" href=")(.*)(?:">)').Groups[1].Value }
# Download an offline Java installer
#$URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/en/download/manual.jsp).Content | % { [regex]::matches($_, '(?:<a title="Download Java software for Windows Offline" href=")(.*)(?:">)').Groups[1].Value }
Invoke-WebRequest -UseBasicParsing -OutFile jre8.exe $URL
Start-Process .\jre8.exe '/s REBOOT=0 SPONSORS=0 AUTO_UPDATE=0' -wait
echo $?

Komut dosyasındaki ilk satır, TLS 1.2'yi kullanmak için eklendi. Aksi takdirde, aşağıdaki hatayı aldım:

Invoke-WebRequest: The request was aborted: Could not create SSL/TLS secure channel.

Betik otomatik olarak bir Java kurulum dosyasını indirecek, jre8.exe olarak bir diske kaydedecek ve kuracaktır.

Ne yazık ki, JRE kurulum dosyasını Oracle web sitesinden alma yöntemi, yalnızca birkaç hafta önce çalışmayı durdurdu. Şimdi bu web sayfası bazı .js komut dosyaları tarafından oluşturulmuştur. Ve java yükleyicisinin bağlantısını alamıyorum. Belki de Oracle yakında bunu değiştirir.

İlgili makaleler