Estoy configurando un sistema para mantener actualizado Java en nuestra oficina. Todos tienen diferentes versiones de Java, muchas de ellas antiguas e inseguras, y algunas datan de 1.4. Tengo un servidor System Center Essentials que puede expulsar y ejecutar silenciosamente un archivo .msi, y ya he probado que puede instalar la última versión de Java. Pero las versiones antiguas (como la 1.4) no son eliminadas por el instalador, así que necesito desinstalarlas. Todos ejecutan Windows XP.
La pura coincidencia es que Oracle acaba de comprar Sun y Oracle ahora ha cambiado todas las instancias de "Sun" a "Oracle" en Java. Por lo tanto, convenientemente no tengo que preocuparme por desinstalar la última versión de Java, porque solo puedo hacer una búsqueda y desinstalar todos los programas de Sun Java.
Encontré el siguiente script por lotes en una publicación del foro que parecía prometedor:
@echo off & cls
Rem List all Installation subkeys from uninstall key.
echo Searching Registry for Java Installs
for /f %%I in ('reg query HKLM\SOFTWARE\microsoft\windows\currentversion\uninstall') do echo %%I | find "{" > nul && call :All-Installations %%I
echo Search Complete..
goto :EOF
:All-Installations
Rem Filter out all but the Sun Installations
for /f "tokens=2*" %%T in ('reg query %1 /v Publisher 2^> nul') do echo %%U | find "Sun" > nul && call :Sun-Installations %1
goto :EOF
:Sun-Installations
Rem Filter out all but the Sun-Java Installations. Note the tilda + n, which drops all the subkeys from the path
for /f "tokens=2*" %%T in ('reg query %1 /v DisplayName 2^> nul') do echo . Uninstalling - %%U: | find "Java" && call :Sun-Java-Installs %~n1
goto :EOF
:Sun-Java-Installs
Rem Run Uninstaller for the installation
MsiExec.exe /x%1 /qb
echo . Uninstall Complete, Resuming Search..
goto :EOF
Sin embargo, cuando ejecuto el script, obtengo el siguiente resultado:
Searching Registry for Java Installs
'DEV_24x6' is not recognized as an internal or external command,
operable program or batch file.
'SUBSYS_542214F1' is not recognized as an internal or external command,
operable program or batch file.
Y luego parece que se cuelga y ctrl-c para detenerlo.
Al leer el script, no entiendo todo, pero no sé por qué está tratando de ejecutar piezas de claves de registro como programas. ¿Qué hay de malo con el script por lotes? ¿Cómo puedo solucionarlo, de modo que pueda pasar a convertirlo en un MSI y desplegarlo para que todos puedan limpiar esta oficina?
O, alternativamente, ¿puede sugerir una mejor solución o un archivo MSI existente para hacer lo que necesito? Solo quiero asegurarme de quitar todas las versiones antiguas de Java de las computadoras de todos, ya que he oído hablar de exploits que hacen que las páginas web se carguen con versiones antiguas de Java y quiero evitarlas.