我正在建立一个系统,以使Java在我们的办公室中保持最新状态。每个人都有所有不同版本的Java,其中许多版本过时且不安全,有些可以追溯到1.4。我有一个System Center Essentials服务器,它可以推出并以静默方式运行.msi文件,并且我已经测试过它可以安装最新的Java。但是安装程序不会删除旧版本(例如1.4),因此我需要将其卸载。每个人都在运行Windows XP。
巧合的是,Sun刚刚被Oracle收购,Oracle现在已将Java中所有“ Sun”实例更改为“ Oracle”。因此,我可以方便地不必担心卸载最新的Java,因为我可以搜索并卸载所有Sun Java程序。
@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
但是,当我运行脚本时,得到以下输出:
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.
然后它似乎挂起了,我按ctrl-c停止了它。
通读脚本,我不了解所有内容,但不知道为什么它试图将注册表项作为程序运行。批处理脚本有什么问题?我该如何修复它,以便我可以继续以某种方式将其转变为MSI,然后将其部署给所有人以清理该办公室?
或者,您可以建议一个更好的解决方案或现有的MSI文件来满足我的需要吗?我只想确保从每个人的计算机上删除所有旧版本的Java,因为我听说过一些利用旧版Java加载网页的漏洞,所以我想避免使用这些漏洞。