Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Môi trường chạy Java (JRE) được sử dụng rộng rãi trên máy tính người dùng để chạy các ứng dụng Java doanh nghiệp khác nhau. Tuy nhiên, một số ứng dụng yêu cầu phiên bản Java cụ thể và có thể hoạt động không đúng trên các phiên bản khác. Trong bài viết này, chúng ta sẽ thảo luận về cách kiểm tra các phiên bản Java đã cài đặt trên các máy tính trong mạng của bạn, cũng như cách gỡ cài đặt hoặc cập nhật JRE bằng PowerShell.

Cách kiểm tra phiên bản Java trong Windows

Bạn có thể lấy số phiên bản của Java đã cài đặt trên máy tính bằng cách nhập java vào hộp tìm kiếm của Windows 10 và chạy'applet Java.

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Trong cửa sổ About Java, phiên bản JRE hiện tại được chỉ định. Trong trường hợp của tôi, đó là Java Version 8 Update 261 (build 1.8.0_261-b12). Hãy lưu ý giá trị bản dựng JRE. Tất cả các phiên bản Java đều có số 1 ở đầu, tiếp theo là số phiên bản chính của JRE (là 8 trong trường hợp của tôi) và số bản cập nhật.

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Bạn cũng có thể kiểm tra phiên bản Java hiện tại trong Chương trình và Tính năng của Windows (Win+R → appwiz.cpl).

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Bạn có thể hiển thị phiên bản Java hiện tại trong dấu nhắc lệnh. Chạy cmd.exe và thực thi lệnh:

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)

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Kiểm tra phiên bản Java bằng PowerShell

Bạn có thể kiểm tra phiên bản Java đã cài đặt trên máy tính bằng PowerShell. Bạn chỉ cần kiểm tra phiên bản của tệp thực thi java.exe (đường dẫn đến tệp này được đặt trong biến môi trường khi cài đặt JRE SE). Hiển thị phiên bản tệp java:

Get-Command Java | Select-Object Version

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Bạn có thể xem thông tin chi tiết về phiên bản, bản cập nhật và số phát hành của Java:

Get-Command java | Select-Object -ExpandProperty Version

Major Minor Build Revision
----- ----- ----- --------
8     0     2610  12

Nếu bạn muốn lấy giá trị chuỗi của phiên bản Java để sử dụng trong script, hãy dùng lệnh:

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

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Bạn cũng có thể tìm phiên bản Java thông qua lớp WMI Win32_Product (chứa danh sách các chương trình đã cài đặt trong Windows):

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

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

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

Các ID này có thể được sử dụng sau này để gỡ cài đặt JRE chính xác.

Nếu bạn chỉ muốn hiển thị phiên bản Java mà không có Java Auto Updater, hãy sử dụng lệnh sau:

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

PowerShell – Kiểm tra phiên bản Java trên máy tính từ xa

Nếu bạn muốn lấy các phiên bản Java được sử dụng trên tất cả các máy tính hoặc máy chủ trong miền của mình, bạn có thể sử dụng script PowerShell sau. Script có thể lấy thông tin từ tất cả các máy chủ từ xa theo danh sách bạn nhập thủ công hoặc từ một tệp văn bản. Bạn cũng có thể lấy danh sách máy chủ hoặc máy tính trong AD bằng cmdlet Get-ADComputer từ module 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

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Kết quả bạn sẽ có một bảng với danh sách các máy tính/máy chủ và các phiên bản Java được cài đặt trên chúng.

Trong trường hợp của tôi, khi kiểm tra phiên bản Java trên các máy tính trong miền, tôi tìm thấy 24 phiên bản JRE khác nhau!

Script PowerShell để gỡ cài đặt tất cả các phiên bản Java

Tại sao bạn có thể cần gỡ cài đặt các phiên bản Java trước đó trong Windows?

  • Trước khi cài đặt phiên bản Java mới, tốt nhất là gỡ cài đặt tất cả các phiên bản trước đó. Giống như các sản phẩm khác, các tính năng mới xuất hiện và các lỗ hổng bảo mật quan trọng liên tục được khắc phục trong Java. Nếu bạn cài đặt các phiên bản Java cũ hơn, máy tính của bạn dễ bị tấn công hoặc khai thác các lỗ hổng đã biết hoặc 0-day. Java có cơ chế tự động cập nhật tích hợp, nhưng vì nhiều lý do, quản trị viên có thể tắt nó trên các máy tính trong miền.
  • Bạn không có đăng ký Java JRE trả phí. Năm 2019, Oracle thay đổi chính sách cấp phép Java. Nếu bạn muốn sử dụng các phiên bản Oracle JDK (Java SE) trước đó, bạn phải có đăng ký trả phí. Điều này áp dụng cho tất cả các bản phát hành Java JRE sau ngày 16 tháng 4, 2019 (từ Java 8 SE Update 211).
    Các phiên bản Java SE thương mại có hỗ trợ lâu dài (cập nhật được phát hành trong 5 năm kể từ ngày phát hành). Phiên bản Java miễn phí là OpenJDK (được phân phối theo GPL), nhưng bạn phải cập nhật nó mỗi sáu tháng. Một nhược điểm khác của OpenJDK là nó không có trình cài đặt tiện lợi cho Windows. Bạn phải tải xuống và cài đặt OpenJDK thủ công. Có một tùy chọn hay để cài đặt OpenJDK bằng trình quản lý gói Chocolatey: choco install openjdk

Bạn có thể sử dụng script PowerShell sau để xóa tất cả các phiên bản Java đã cài đặt trên máy tính cục bộ:

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

Tuy nhiên, lệnh gỡ cài đặt dựa trên WMI ở trên hoạt động khá chậm.

Thay vào đó, bạn có thể lấy danh sách các phiên bản Java đã cài đặt từ registry và gỡ cài đặt tất cả chúng bằng GUID sản phẩm được tạo khi cài đặt phần mềm qua 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
}

Cách kiểm tra hoặc cập nhật phiên bản Java trong Windows bằng PowerShell

Cách tải xuống và cài đặt Java JRE bằng PowerShell

Script PowerShell sau tự động tải xuống phiên bản mới nhất của trình cài đặt Java từ trang web chính thức và cài đặt nó trên máy tính (bạn có thể tải cả trình cài đặt online và offline). Lệnh cài đặt chặn yêu cầu khởi động lại và tắt tự động cập nhật Java.

Để tải tệp cài đặt từ trang web, cmdlet Invoke-WebRequest được sử dụng. Nếu máy tính của bạn nằm sau proxy, hãy cấu hình PowerShell để truy cập Internet qua máy chủ 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 $?

Dòng đầu tiên trong script được thêm để sử dụng TLS 1.2. Nếu không, tôi nhận được lỗi sau:

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

Script sẽ tự động tải xuống tệp cài đặt Java, lưu nó trên đĩa dưới tên jre8.exe và cài đặt.

Thật không may, phương pháp lấy tệp cài đặt JRE từ trang web Oracle đã ngừng hoạt động chỉ vài tuần trước. Trang web này hiện được tạo bởi một số script .js. Và tôi không thể lấy liên kết đến trình cài đặt Java. Có lẽ Oracle sẽ thay đổi điều này sớm.