我正在设置一个系统,以保持我们办公室的 Java 处于最新状态。每个人都有不同版本的 Java,其中许多版本很旧且不安全,有些甚至早至 1.4 版。我有一台 System Center Essentials 服务器,它可以推送并静默运行 .msi 文件,我已经测试过它可以安装最新的 Java。但安装程序不会删除旧版本(例如 1.4),所以我需要卸载它们。每个人都在运行 Windows XP。
巧合的是,Sun 刚刚被 Oracle 收购,Oracle 现在已将 Java 中的所有“Sun”改为“Oracle”。因此,我不必担心卸载最新的 Java,因为我只需搜索并卸载所有太阳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 会导致网页加载的漏洞,我想避免这些漏洞。
答案1
以下是我们使用的,作为启动脚本效果很好:
on error resume next
dim WshShell
dim RegKey
dim ScriptVerKey
Set WshShell = CreateObject("WScript.Shell")
'checks to see if registry key exists, if it does, the cleanup runs.
RegKey = "HKLM\SOFTWARE\EDU\Cleanup\"
ScriptVerKey = WshShell.RegRead(RegKey & "JAVAOldVer")
if ScriptVerKey <> "1" Then
Cleanup()
Else
WScript.Quit
End If
Sub Cleanup()
' Uninstall Java 1.4.1.01
WshShell.Run "msiexec /x {1666FA7C-CB5F-11D6-A78C-00B0D079AF64} /q",1,True
' Uninstall Java 1.4.2.04
WshShell.Run "msiexec /x {7148F0A8-6813-11D6-A77B-00B0D0142040} /q",1,True
' Uninstall Java 5.0.2
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150020} /q",1,True
' Uninstall Java 5.0.4
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150040} /q",1,True
' Uninstall Java 5.0.5
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150050} /q",1,True
' Uninstall Java 5.0.6
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150060} /q",1,True
' Uninstall Java 5.0.7
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150070} /q",1,True
' Uninstall Java 5.0.10
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150100} /q",1,True
' Uninstall Java 5.0.11
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150110} /q",1,True
' Uninstall Java 5.0.12
'WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150120} /q",1,True
' Uninstall Java 6.0.0
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160000} /q",1,True
' Uninstall Java 6.0.1
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160010} /q",1,True
' Uninstall Java 6.0.2
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160020} /q",1,True
' Uninstall Java 6.0.5
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160050} /q",1,True
' Uninstall Java 6.0.30 (020608)
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160030} /q",1,True
'regkey below stops the script from running again
WshShell.RegWrite "HKLM\Software\EDU\", "Default"
WshShell.RegWrite "HKLM\Software\EDU\Cleanup\", "Default"
WshShell.RegWrite "HKLM\Software\EDU\Cleanup\JAVAOldVer", 1, "REG_SZ"
End Sub
答案2
此行将卸载所有版本的 JAVA:
wmic 产品,其中“名称类似于‘Java%% %%’”调用卸载/nointeractive
答案3
摘录自: http://www.java.com/en/download/faq/remove_olderversions.xml
随着时间的推移,您可能安装了多个版本的 Java 来运行可用的 Java 内容。过去,每个 Java 更新都安装在系统上的单独目录中。 但是,Java 更新现在安装在单个目录中。
我应该删除旧版本的 Java 吗?我们强烈建议用户从系统中删除所有旧版本的 Java。在系统上保留旧的和不受支持的 Java 版本会带来严重的安全风险。从系统中删除旧版本的 Java 可确保 Java 应用程序在系统上运行,并采用最新的安全性和性能改进。
我发现以下 VBScript,理论上可以正确删除 Java 的先前版本。最好从下往上阅读,因为其他人已经对其进行了修改,使其更加完美:
答案4
有一些 vbscript 代码这里您应该能够通过组策略进行部署,而无需 msi。