用于卸载所有 Sun Java 版本的批处理文件?

用于卸载所有 Sun Java 版本的批处理文件?

我正在设置一个系统,以保持我们办公室的 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 的先前版本。最好从下往上阅读,因为其他人已经对其进行了修改,使其更加完美:

http://www.appdeploy.com/messageboards/tm.asp?m=29809

答案4

有一些 vbscript 代码这里您应该能够通过组策略进行部署,而无需 msi。

相关内容