Java Runtime Environmen (JRE) достаточно широко используется для запуска различных корпоративных приложений, написанных на java. Однако некоторые программы требуют для запуска определенную версию 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 на них.
Скрипт 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
}
Как скачать установить 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=")(.*)(?:">)').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=")(.*)(?:">)').Groups[1].Value }
Invoke-WebRequest -UseBasicParsing -OutFile jre8.exe $URL
Start-Process .\jre8.exe '/s REBOOT=0 SPONSORS=0 AUTO_UPDATE=0' -wait
echo $?
Invoke-WebRequest : Запрос был прерван: Не удалось создать защищенный канал SSL/TLS.
Скрипт автоматически загрузит установочный файл Java, сохранит его на диск в виде jre8.exe и установит среду JRE.