Búsqueda de sitios web

¿Cómo verificar o actualizar la versión de Java en Windows con PowerShell?


Java Runtime Environment (JRE) se usa ampliamente en las computadoras de los usuarios para ejecutar diferentes aplicaciones Java empresariales. Sin embargo, algunas aplicaciones requieren la versión específica de Java y pueden funcionar incorrectamente en otras versiones. En este artículo, discutiremos cómo verificar las versiones de Java instaladas en las computadoras de su red y cómo desinstalar o actualizar JRE usando PowerShell.

¿Cómo comprobar la versión de Java en Windows?

Puede obtener el número de versión de Java instalado en su computadora si ingresa

java

en el cuadro de búsqueda de Windows 10 y ejecute el subprograma Java.

En la ventana Acerca de Java, se especifica la versión actual de JRE. en mi caso es

Java Version 8 Update 261 (build 1.8.0_261-b12)

. Tenga en cuenta el valor de la compilación JRE. Todas las versiones de Java tienen 1 al principio, seguido del número de la versión principal de JRE (es 8 en mi caso) y el número de actualización.

También puede comprobar la versión actual de Java en Programas y características de Windows (Win+R ->

appwiz.cpl

).

Puede mostrar la versión actual de Java en el símbolo del sistema. Correr

cmd.exe

y ejecuta el comando:

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)

Verifique la versión de Java usando PowerShell

Puede verificar la versión de Java instalada en su computadora usando PowerShell. Simplemente puede verificar la versión del archivo ejecutable

java.exe

(la ruta se establece en las variables de entorno cuando JRE SE está instalado en su computadora). Mostrar la versión del archivo java:

Get-Command Java | Select-Object Version

Puede ver información detallada sobre la versión de Java, la actualización y el número de lanzamiento:

Get-Command java | Select-Object -ExpandProperty Version
Major Minor Build Revision
----- ----- ----- --------
8 0 2610 12

Si desea obtener un valor de cadena de su versión de Java para usar en scripts, use el comando:

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

También puede averiguar su versión de Java a través de la clase WMI Win32_Product (contiene la lista de programas instalados en 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

Los ID se pueden usar más adelante para desinstalar correctamente JRE.

Si desea mostrar solo la versión de Java sin Java Auto Updater, use el siguiente comando:

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

PowerShell: verifique la versión de Java en computadoras remotas

Si desea que las versiones de Java se utilicen en todas las computadoras o servidores de su dominio, puede usar el siguiente script de PowerShell. El script puede obtener la información de todos los servidores de forma remota según la lista que ingrese manualmente o desde un archivo de texto. También puede obtener la lista de servidores o computadoras en AD usando el cmdlet Get-ADComputer del módulo 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

Como resultado, tendrá una tabla con la lista de computadoras/servidores y las versiones de Java instaladas en ellos.

En mi caso, al verificar la versión de Java en las computadoras del dominio, ¡encontré 24 versiones diferentes de JRE!

Script de PowerShell para desinstalar todas las versiones de Java

¿Por qué puede necesitar desinstalar versiones anteriores de Java en Windows?

  • Antes de instalar una nueva versión de Java, es mejor desinstalar todas las versiones anteriores. Al igual que en otros productos, en Java aparecen nuevas funciones y se corrigen constantemente vulnerabilidades críticas. Si tiene instaladas versiones anteriores de Java, su computadora está sujeta a infección o explotación de vulnerabilidades conocidas o de 0 días. Java tiene un mecanismo de actualización automática incorporado, pero los administradores pueden deshabilitarlo en las computadoras del dominio por diferentes motivos.

  • No tiene una suscripción paga de Java JRE. En 2019, Oracle cambió la política de licencias de Java. Si desea utilizar versiones anteriores de Oracle JDK (Java SE), debe obtener una suscripción paga. Hace referencia a todas las versiones de Java JRE posteriores al 16 de abril de 2019 (de Java 8 SE Update 211).

    Las versiones comerciales de Java SE tienen soporte durante mucho tiempo (las actualizaciones se publican durante 5 años desde la fecha de lanzamiento). Una versión gratuita de Java es Open JDK (distribuida bajo GPL), pero debe actualizarla cada seis meses. Otra desventaja de Open JDK es que no tiene un instalador conveniente para Windows. Debe descargar e instalar Open JDK manualmente. Hay una buena opción para instalar Open JDK usando el administrador de paquetes WinGet:

    winget install --id=ojdkbuild.openjdk.11.jdk -e 

Puede usar el siguiente script de PowerShell para eliminar todas las versiones de Java instaladas en una computadora local:

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

Sin embargo, el comando de desinstalación anterior se basa en WMI y funciona lentamente.

En su lugar, puede obtener una lista de las versiones de Java instaladas del registro y desinstalarlas todas mediante el GUID de su producto generado cuando instala el software a través de 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ómo descargar e instalar Java JRE usando PowerShell?

El siguiente script de PowerShell descarga automáticamente la última versión del instalador de Java del sitio web oficial y lo instala en una computadora (puede descargar el instalador en línea y sin conexión). El comando de instalación suprime la solicitud de reinicio y deshabilita las actualizaciones automáticas de Java.

Para descargar un archivo de instalación del sitio web, se usa el cmdlet Invoke-WebRequest. Si su computadora está detrás de un proxy, configure su PowerShell para acceder a Internet a través de un servidor 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 $?

La primera línea del script se agregó para usar TLS 1.2. De lo contrario, tuve el siguiente error:

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

El script descargará automáticamente un archivo de instalación de Java, lo guardará en un disco como jre8.exe e instalará.

Desafortunadamente, este método de obtener el archivo de configuración de JRE del sitio web de Oracle dejó de funcionar hace solo unas semanas. Ahora esta página web es generada por algún script .js. Y no puedo obtener el enlace al instalador de Java. Quizás Oracle cambie esto pronto.

Artículos relacionados