Si se deja sin supervisión, los entornos de ejecución de Java pueden propagarse como un incendio en una empresa. Cuando ejecuté un informe para averiguar cómo estaba el panorama de Java en mi entorno, ¡encontré 62 versiones diferentes de Java! Es hora de recuperar el control y construir un script de PowerShell para eliminar las versiones antiguas de Java.
En este tutorial, aprenderás cómo crear una herramienta de eliminación de Java para quitar las versiones antiguas en PowerShell.
¡Empecemos!
Creación del Script
Primero, abre tu editor de código favorito, como Visual Studio Code, y guarda el archivo como Remove-Java.ps1. Este script de PowerShell contendrá todo lo necesario para limpiar las versiones anteriores de Java.
Define las Rutas del Registro
Dado que las instancias de Java pueden ocultarse en dos lugares en el registro, primero define cada una de las claves del registro principal. El fragmento de código siguiente proporciona tanto las rutas del registro de 32 como de 64 bits.
Define las Versiones a Conservar
Probablemente quieras conservar algunas versiones antiguas de Java, así que crea un array con cada una de las versiones que te gustaría conservar.
Puedes encontrar el texto exacto a utilizar mirando en Programas y Características en el Panel de Control.
Encuentra y Detén todos los Procesos en Ejecución
A continuación, encuentra todos los procesos de Java en ejecución. El fragmento de código siguiente enumera todos los procesos en ejecución con WMI que se están ejecutando con un archivo en una ruta que coincide con “Program Files\Java“.
Dado que Java puede integrarse en Internet Explorer y no puede eliminarse, ve adelante y detén también todos los procesos de Internet Explorer.
Buscar Java en el Registro y Forzar una Desinstalación
A continuación, construya un filtro que utilizará para enumerar todos los valores bajo las claves del registro definidas anteriormente. Este filtro encuentra todas las instancias de Java y excluye todas las versiones que le gustaría conservar.
Ahora busque a través del registro para encontrar todas las instancias de Java y, si se encuentran, ejecute msiexec.exe /X
para eliminar cada instancia.
Eliminar cualquier Remanente Antiguo de Java
Limpiar cualquier resto que el desinstalador de Java no elimine por sí solo.
Conclusión
¡Y eso es todo! Ejecute este script de PowerShell en cada computadora en la que desee limpiar Java para que este proceso sea lo más sencillo posible.
No dude en descargar el script completo de una vez a continuación.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$RegUninstallPaths = @( | |
‘HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall‘, | |
‘HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall‘ | |
) | |
$VersionsToKeep = @(‘Java 8 Update 261‘) | |
Get-CimInstance –ClassName ‘Win32_Process‘ | Where-Object {$_.ExecutablePath -like ‘*Program Files\Java*‘} | | |
Select-Object @{n=‘Name‘;e={$_.Name.Split(‘.‘)[0]}} | Stop-Process –Force | |
Get-process –Name *iexplore* | Stop-Process –Force –ErrorAction SilentlyContinue | |
$UninstallSearchFilter = {($_.GetValue(‘DisplayName‘) -like ‘*Java*‘) -and (($_.GetValue(‘Publisher‘) -eq ‘Oracle Corporation‘)) -and ($VersionsToKeep -notcontains $_.GetValue(‘DisplayName‘))} | |
# Uninstall unwanted Java versions and clean up program files | |
foreach ($Path in $RegUninstallPaths) { | |
if (Test-Path $Path) { | |
Get-ChildItem $Path | Where-Object $UninstallSearchFilter | | |
foreach { | |
Start-Process ‘C:\Windows\System32\msiexec.exe‘ “/X$($_.PSChildName) /qn“ –Wait | |
} | |
} | |
} | |
New-PSDrive –Name HKCR –PSProvider Registry –Root HKEY_CLASSES_ROOT | Out-Null | |
$ClassesRootPath = “HKCR:\Installer\Products“ | |
Get-ChildItem $ClassesRootPath | | |
Where-Object { ($_.GetValue(‘ProductName‘) -like ‘*Java*‘)} | Foreach { | |
Remove-Item $_.PsPath –Force –Recurse | |
} | |
$JavaSoftPath = ‘HKLM:\SOFTWARE\JavaSoft‘ | |
if (Test-Path $JavaSoftPath) { | |
Remove-Item $JavaSoftPath –Force –Recurse | |
} |
Gracias a Sam Turner por ayudarme a corregir algunos errores con este código.