Estou configurando um sistema para manter o Java em nosso escritório atualizado. Todo mundo tem todas as versões diferentes do Java, muitas delas antigas e inseguras, e algumas datam da versão 1.4. Eu tenho um servidor System Center Essentials que pode enviar e executar silenciosamente um arquivo .msi e já testei que ele pode instalar o Java mais recente. Mas versões antigas (como a 1.4) não são removidas pelo instalador, por isso preciso desinstalá-las. Todo mundo está executando o Windows XP.
A pura coincidência é que a Sun acabou de ser comprada pela Oracle e a Oracle agora mudou todas as instâncias do "Sun" para "Oracle" em Java. Portanto, convenientemente não preciso me preocupar em desinstalar o Java mais recente, porque posso apenas pesquisar e desinstalar todos os programas Java da Sun.
Encontrei o seguinte script em lote em uma postagem do fórum que parecia promissora:
@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
No entanto, quando executo o script, obtenho a seguinte saída:
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.
E então parece travar e eu ctrl-c para interrompê-lo.
Lendo o script, não entendo tudo, mas não sei por que ele está tentando executar pedaços de chaves do Registro como programas. O que há de errado com o script em lote? Como posso corrigi-lo, para que eu possa, de alguma forma, transformá-lo em um MSI e implantá-lo em todos para limpar este escritório?
Ou, como alternativa, você pode sugerir uma solução melhor ou um arquivo MSI existente para fazer o que eu preciso? Eu só quero ter certeza de obter todas as versões antigas do Java dos computadores de todos, já que ouvi falar de explorações que causam o carregamento de páginas da Web usando versões antigas do Java e quero evitá-las.