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

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

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

додаток Java у Windows 10

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

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

версія java в панелі упавленія

Можна вивести поточну версію 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 -версія

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

Ви можете дізнатися версію Java на вашому комп’ютері за допомогою PowerShell. Можна просто перевірити версію виконуваного файлу java.exe (шлях до неї прописується в змінні оточення при установці JRE SE на вашому комп’ютері). Виведемо версію java файлу:

Get-Command Java | Select-Object Version

powershell версія файлу java

Можна вивести детальну інформацію про версії, оновленні та релізі 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 se

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

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

wmi фільтр для виведення встановлених версій 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 за списком комп’ютерів

# $ комп’ютери = @ (‘sever1, server2, server3’)

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

# $ комп’ютери = Get-content C: PS ServerList.txt

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

$ комп’ютери = ((get-adcomputer -Filter {enabled -eq «true» -і OperatingSystem -Like ‘* Windows Server *’}). name) .tostring ()

Get-WmiObject -Class Win32_Product -ComputerName $ computers -Filter «Ім’я типу ‘% Java%’, а не Ім’я як ‘% Java Auto Updater%’» | Виберіть __Сервер, версія

отримати версію java на віддалених комп'ютерах за допомогою powershell

В результаті у вас з’явиться табличка зі списком комп’ютерів / серверів і версією 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 – Відкрийте JDK (Поширюється по GPL), проте вам доведеться оновлювати її раз на півроку. Ще один недолік Відкрийте 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:SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionUninstall" | foreach { gp $_.PSPath } | ? { $_ -like "*Java*" } | select UninstallString
$uninstall64 = gci "HKLM:SOFTWAREMicrosoftWindowsCurrentVersionUninstall" | 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 скрипт для видалення всіх версій java

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

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

#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($_, '(?:<a title="Download Java software for Windows Online" href="https://winitpro.ru/index.php/2020/01/30/proverit-versiyu-obnovit-udalit-java-iz-powershell/)(.*)(?:">)').Groups[1].Value }
# скачать офлайн установщик Java
#$URL = (Invoke-WebRequest -UseBasicParsing https://www.java.com/en/download/manual.jsp).Content | % { [regex]::matches($_, '(?:<a title="Download Java software for Windows Offline" href="https://winitpro.ru/index.php/2020/01/30/proverit-versiyu-obnovit-udalit-java-iz-powershell/)(.*)(?:">)').Groups[1].Value }
Invoke-WebRequest -UseBasicParsing -OutFile jre8.exe $URL
Start-Process .jre8.exe '/s REBOOT=0 SPONSORS=0 AUTO_UPDATE=0' -wait
echo $?

завантажити установник java за допомогою powershell

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

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

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

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

Leave a Reply

Your email address will not be published. Required fields are marked *