Як перевірити версію, оновити або видалити Java за допомогою PowerShell?

Java Runtime Environmen (JRE) досить широко використовується для запуску різних корпоративних додатків, написаних на java. Однак деякі програми вимагають для запуску певну версію Java і можуть функціонувати належним чином в інших версіях. У цій статті ми розглянемо, як розібратися, які версії Java встановлені на комп'ютерах користувачів у вашій мережі, а також як видалити або оновити версію середовища JRE з допомогу PowerShell.

зміст:

  • Як дізнатися встановлену версію Java в Windows?
  • Як дізнатися версію Java з PowerShell?
  • PowerShell: отримати версію Java на віддалених комп'ютерах
  • Скрипт PowerShell для видалення всіх версій Java
  • Як завантажити встановити Java JRE за допомогою PowerShell?

Як дізнатися встановлену версію Java в Windows?

Ви можете отримати номер версії Java, встановленої на вашому комп'ютері, якщо наберете 'java'У вікні пошуку Windows 10 і запустіть аплет Java.

У вікні «About Java» вказана поточна версія JRE. У моєму випадку це Java Version 8 Update 231 (build 1.8.0_231-b11). Зверніть увагу на значення билда JRE. У всіх версіях Java на початку вказана 1, потім номер мажорній версії JRE (у мене це 8), Потім номер поновлення.

Також ви можете дізнатися поточну версію Java в панелі 'Програми і компонентах Windows' (Win + R -> appwiz.cpl).

Можна вивести поточну версію Java з командного рядка. Запустіть cmd.exe і виконайте команду:

java -version

java version "1.8.0_231" Java (TM) SE Runtime Environment (build 1.8.0_231-b11) Java HotSpot (TM) Client VM (build 25.231-b11, mixed mode) 

Як дізнатися версію Java з PowerShell?

Ви можете дізнатися версію Java на вашому комп'ютері за допомогою PowerShell. Можна просто перевірити версію виконуваного файлу 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 2310 11 

Якщо вам потрібно отримати строкове значення версії Java для використання в скриптах, використовуйте:

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

Також ви можете дізнатися версію Java через WMI клас, який містить список встановлених програм в Windows:

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

IdentifyingNumber: 26A24AE4-039D-4CA4-87B4-2F32180231F0 Name: Java 8 Update 231 Vendor: Oracle Corporation Version: 8.0.2310.11 Caption: Java 8 Update 231 IdentifyingNumber: 4A03706F-666A-4037-7777-5F2748764D10 Name: Java Auto Updater Vendor: Oracle Corporation Version: 2.8.231.11 Caption: Java Auto Updater

Отримані ID можна використовувати в подальшому для коректного видалення 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 скрипт для перевірки верси Java SE (JRE) на віддалених комп'ютерах / серверах

# Перевірити версію Java за списком комп'ютерів

# $ Computers = @ ( 'sever1, server2, server3')

# Перевірити версію Java по списку серверів в текстовому файлі

# $ Computers = Get-content C: \ PS \ ServerList.txt

# Отримати версію Java на всіх серверах домена

$ 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 на комп'ютерах я знайшов 35 різних версій JRE!

Скрипт PowerShell для видалення всіх версій Java

Чому вам може знадобиться видаляти попередні версії Java в Windows?

  • Перед установкою нової версії Java бажано видалити всі попередні версії. Як і у всіх інших продуктах в Java постійно оновлюється функціонал, і виправляються критичні уразливості. Якщо у вас встановлена ​​стара версій Java, ви піддаєте комп'ютер ризику зараження і експлуатації відомих і 0-day вразливостей. В 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), проте вам доведеться оновлювати її раз на півроку. Ще один недолік Open JDK - поки відсутні нормальні кошти установки для Windows. Доводиться качати і встановлювати Open JDK вручну. Є один прийнятні варіант з установкою Open JDK за допомогою менеджера пакетів Chocolatey: choco install openjdk

Наступний PowerShell скрипт можна використовувати для видалення всіх встановлених версій Java на комп'ютері

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

Однак розглянута вище команда видалення заснована на WMI і не дивлячись на свою простоту, працює досить повільно.

Замість цього можна отримати список встановлених Java з реєстру і видалити всі знайдені версії Java по GUID продукту, який генерується при установці ПО через MSI.

#PowerShell скрипт для видалення всіх версій Java SE (JRE) на комп'ютері
$ 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
# Видалення 64 бітових версій Java
if ($ uninstall64)
$ Uninstall64 = $ uninstall64.UninstallString -Replace "msiexec.exe", "" -Replace "/ I", "" -Replace "/ X", ""
$ Uninstall64 = $ uninstall64.Trim ()
Write "Uninstalling ..."
start-process "msiexec.exe" -arg "/ X $ uninstall64 / qb" -Wait

# Видалення 32 бітових версій Java
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 cкриптов з цієї статті доступні в моєму репозиторії на GitHub https://github.com/winadm/posh/tree/master/Java.

Як завантажити встановити Java JRE за допомогою PowerShell?

Наступний PowerShell скрипт дозволяє автоматично завантажити останню версію дистрибутива Java (можна завантажити офлайн або онлайн установник) з офіційного сайту і встановити його на комп'ютері користувача. При цьому ми придушуємо вимога перезавантаження і відключаємо автоматичне оновлення Java.

Для скачування файлу установника з сайту використовується командлет Invoke-WebRequest.

#PowerShell скрипт для автоматичного завантаження та встановлення останньої версії Java SE (JRE) на комп'ютері
[Net.ServicePointManager] :: SecurityProtocol = [Net.SecurityProtocolType] :: Tls12
# Скачати онлайн установник Java
$ URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/en/download/manual.jsp).Content | % [Regex] :: matches ($ _, '(? :)'). Groups [1] .Value
# Завантажити офлайн установник Java
# $ URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/en/download/manual.jsp).Content | % [Regex] :: matches ($ _, '(? :)'). Groups [1] .Value
Invoke-WebRequest -UseBasicParsing -OutFile jre8.exe $ URL
Start-Process. \ Jre8.exe '/ s REBOOT = 0 SPONSORS = 0 AUTO_UPDATE = 0' -wait
echo $?

Якщо комп'ютер, знаходиться за проксі, потрібно налаштувати PowerShell для доступу до інтернету через проксі.

Перший рядок у скрипті додана, щоб переключитися на протокол TLS 1.2. Інакше при запуску у мене з'являлася помилка:

Invoke-WebRequest: Запит був перерваний: Не вдалося згенерувати захищений канал SSL / TLS.

Скрипт автоматично завантажить інсталяційний файл Java, збереже його на диск у вигляді jre8.exe і встановить середу JRE.