Java Runtime Environment (JRE) ถูกใช้กันอย่างแพร่หลายบนคอมพิวเตอร์ของผู้ใช้เพื่อรันแอปพลิเคชัน Java ขององค์กรที่หลากหลาย อย่างไรก็ตาม บางแอปพลิเคชันต้องการเวอร์ชัน Java เฉพาะและอาจทำงานไม่ถูกต้องในเวอร์ชันอื่น ในบทความนี้ เราจะพูดถึงวิธีตรวจสอบเวอร์ชัน Java ที่ติดตั้งอยู่บนคอมพิวเตอร์ในเครือข่ายของคุณ และวิธียกเลิกการติดตั้งหรืออัปเดต JRE โดยใช้ PowerShell
วิธีตรวจสอบเวอร์ชัน Java ใน Windows
คุณสามารถดูหมายเลขเวอร์ชันของ Java ที่ติดตั้งอยู่บนคอมพิวเตอร์ได้โดยการพิมพ์ java ในกล่องค้นหาของ Windows 10 และรัน Java applet

ในหน้าต่าง About Java จะระบุเวอร์ชัน JRE ปัจจุบัน ในกรณีของผมคือ Java Version 8 Update 261 (build 1.8.0_261-b12) โปรดสังเกตค่าของ JRE build ทุกเวอร์ชัน Java จะมี 1 นำหน้า ตามด้วยหมายเลขเวอร์ชันหลักของ JRE (คือ 8 ในกรณีนี้) และหมายเลขอัปเดต

คุณยังสามารถตรวจสอบเวอร์ชัน Java ปัจจุบันได้ใน Programs and Features ของ Windows (Win+R → appwiz.cpl)

คุณสามารถแสดงเวอร์ชัน Java ปัจจุบันใน Command Prompt ได้ ให้รัน cmd.exe และใช้คำสั่ง:
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)

ตรวจสอบเวอร์ชัน Java โดยใช้ PowerShell
คุณสามารถตรวจสอบเวอร์ชัน Java ที่ติดตั้งอยู่บนคอมพิวเตอร์โดยใช้ PowerShell ได้ คุณสามารถตรวจสอบเวอร์ชันของไฟล์ executable java.exe (พาธไปยังไฟล์นี้ถูกตั้งค่าในตัวแปรสภาพแวดล้อมเมื่อติดตั้ง JRE SE บนคอมพิวเตอร์) แสดงเวอร์ชันของไฟล์ java:
Get-Command Java | Select-Object Version

คุณสามารถดูข้อมูลโดยละเอียดเกี่ยวกับเวอร์ชัน Java อัปเดต และหมายเลขการเผยแพร่ได้:
Get-Command java | Select-Object -ExpandProperty Version
Major Minor Build Revision ----- ----- ----- -------- 8 0 2610 12
หากคุณต้องการค่าสตริงของเวอร์ชัน Java เพื่อใช้ในสคริปต์ ให้ใช้คำสั่ง:
(Get-Command java | Select-Object -ExpandProperty Version).tostring()

คุณยังสามารถค้นหาเวอร์ชัน Java ผ่านคลาส WMI Win32_Product (ซึ่งมีรายการโปรแกรมที่ติดตั้งใน Windows):
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
รหัสเหล่านี้อาจถูกใช้ในภายหลังเพื่อยกเลิกการติดตั้ง JRE ให้ถูกต้อง
หากคุณต้องการแสดงเฉพาะเวอร์ชัน Java โดยไม่รวม Java Auto Updater ให้ใช้คำสั่งต่อไปนี้:
Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%' and not Name like '%Java Auto Updater%'" | Select -Expand Version
PowerShell – ตรวจสอบเวอร์ชัน Java บนคอมพิวเตอร์ระยะไกล
หากคุณต้องการดูเวอร์ชัน Java ที่ใช้บนคอมพิวเตอร์หรือเซิร์ฟเวอร์ทั้งหมดในโดเมนของคุณ คุณสามารถใช้สคริปต์ PowerShell ต่อไปนี้ สคริปต์นี้สามารถดึงข้อมูลจากเซิร์ฟเวอร์ทั้งหมดจากระยะไกลตามรายการที่คุณป้อนด้วยตนเองหรือจากไฟล์ข้อความ คุณยังสามารถดึงรายการเซิร์ฟเวอร์หรือคอมพิวเตอร์ใน AD โดยใช้คำสั่ง Get-ADComputer จากโมดูล RSAT-AD-PowerShell
# 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

ผลลัพธ์จะเป็นตารางที่มีรายการคอมพิวเตอร์/เซิร์ฟเวอร์และเวอร์ชัน Java ที่ติดตั้งอยู่บนแต่ละเครื่อง
ในกรณีของผม เมื่อตรวจสอบเวอร์ชัน Java บนคอมพิวเตอร์ในโดเมน ผมพบว่ามี JRE ที่แตกต่างกัน 24 เวอร์ชัน!!!
สคริปต์ PowerShell สำหรับยกเลิกการติดตั้งเวอร์ชัน Java ทั้งหมด
ทำไมคุณถึงต้องยกเลิกการติดตั้งเวอร์ชัน Java เก่าใน Windows?
- ก่อนที่จะติดตั้ง Java เวอร์ชันใหม่ ควรยกเลิกการติดตั้งเวอร์ชันเก่าทั้งหมด คล้ายกับผลิตภัณฑ์อื่นๆ ฟีเจอร์ใหม่จะปรากฏขึ้นและช่องโหว่ร้ายแรงจะได้รับการแก้ไขอย่างต่อเนื่องใน Java หากคุณมีเวอร์ชัน Java เก่าติดตั้งอยู่ คอมพิวเตอร์ของคุณจะอยู่ในภาวะเสี่ยงต่อการติดเชื้อหรือการใช้ประโยชน์จากช่องโหว่ที่รู้จักหรือ 0-day vulnerabilities Java มีกลไกอัปเดตอัตโนมัติในตัว แต่ผู้ดูแลระบบอาจปิดใช้งานบนคอมพิวเตอร์ในโดเมนด้วยเหตุผลต่างๆ
- คุณไม่มีการสมัครสมาชิก Java JRE แบบชำระเงิน ในปี 2019 Oracle เปลี่ยนนโยบายการอนุญาต Java หากคุณต้องการใช้ Oracle JDK (Java SE) เวอร์ชันก่อนหน้า คุณต้องได้รับการสมัครสมาชิกแบบชำระเงิน ข้อนี้ใช้กับทุกการเผยแพร่ Java JRE หลังวันที่ 16 เมษายน 2019 (ตั้งแต่ Java 8 SE Update 211)
เวอร์ชัน Java SE แบบพาณิชย์มีการสนับสนุนระยะยาว (มีการเผยแพร่อัปเดตเป็นเวลา 5 ปีนับจากวันที่เผยแพร่) เวอร์ชัน Java ฟรีคือ Open JDK (เผยแพร่ภายใต้ GPL) แต่คุณต้องอัปเดตทุก 6 เดือน อีกข้อเสียของ Open JDK คือไม่มีตัวติดตั้งที่สะดวกสำหรับ Windows คุณต้องดาวน์โหลดและติดตั้ง Open JDK ด้วยตนเอง มีตัวเลือกที่ดีคือการติดตั้ง Open JDK โดยใช้ Chocolatey package manager:choco install openjdk
คุณสามารถใช้สคริปต์ PowerShell ต่อไปนี้เพื่อลบเวอร์ชัน Java ที่ติดตั้งทั้งหมดบนคอมพิวเตอร์ท้องถิ่น:
$jre_installed = Get-WmiObject -Class Win32_Product -Filter "Name like '%Java%'"
$jre_installed.Uninstall()
อย่างไรก็ตาม คำสั่งยกเลิกการติดตั้งข้างต้นใช้ WMI และทำงานช้า
แทนที่จะเป็นเช่นนั้น คุณสามารถดึงรายการเวอร์ชัน Java ที่ติดตั้งจาก Registry และยกเลิกการติดตั้งทั้งหมดโดยใช้ Product GUID ที่สร้างขึ้นเมื่อคุณติดตั้งซอฟต์แวร์ผ่าน MSI
#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
}

วิธีดาวน์โหลดและติดตั้ง Java JRE โดยใช้ PowerShell
สคริปต์ PowerShell ต่อไปนี้จะดาวน์โหลดเวอร์ชันล่าสุดของตัวติดตั้ง Java จากเว็บไซต์อย่างเป็นทางการและติดตั้งบนคอมพิวเตอร์โดยอัตโนมัติ (คุณสามารถดาวน์โหลดทั้งตัวติดตั้งออนไลน์และออฟไลน์) คำสั่งติดตั้งจะปิดใช้งานคำขอรีบูทและปิดใช้งานการอัปเดต Java อัตโนมัติ
ในการดาวน์โหลดไฟล์ตัวติดตั้งจากเว็บไซต์ ใช้คำสั่ง Invoke-WebRequest หากคอมพิวเตอร์ของคุณอยู่เบื้องหลัง Proxy ให้กำหนดค่า PowerShell ให้เข้าถึงอินเทอร์เน็ตผ่านเซิร์ฟเวอร์ Proxy
# 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 $?
บรรทัดแรกในสคริปต์ถูกเพิ่มเข้ามาเพื่อใช้ TLS 1.2 มิฉะนั้นจะเกิดข้อผิดพลาดดังนี้:
Invoke-WebRequest: The request was aborted: Could not create SSL/TLS secure channel.
สคริปต์จะดาวน์โหลดไฟล์ติดตั้ง Java บันทึกเป็น jre8.exe และติดตั้งโดยอัตโนมัติ
น่าเสียดาย วิธีการดึงไฟล์ติดตั้ง JRE จากเว็บไซต์ Oracle หยุดทำงานไปแล้วเพียงไม่กี่สัปดาห์ ตอนนี้หน้าเว็บนี้ถูกสร้างโดยสคริปต์ .js และไม่สามารถดึงลิงก์ไปยังตัวติดตั้ง Java ได้ อาจเป็นว่า Oracle จะเปลี่ยนแปลงเรื่องนี้ในไม่ช้า