すべてのSun Javaバージョンをアンインストールするバッチファイル?


11

Javaを最新の状態に保つためのシステムをセットアップしています。誰もがJavaのすべての異なるバージョンを持っています。その多くは古くて安全ではなく、1.4までさかのぼるバージョンもあります。.msiファイルをプッシュしてサイレントモードで実行できるSystem Center Essentialsサーバーがあり、最新のJavaをインストールできることを既にテストしました。ただし、古いバージョン(1.4など)はインストーラーによって削除されないため、アンインストールする必要があります。全員がWindows XPを実行しています。

偶然の一致は、SunがOracleに買収されたばかりで、OracleがJavaで「Sun」のすべてのインスタンスを「Oracle」に変更したことです。そのため、すべてのSun 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.

そして、それはハングしているように見えます。

スクリプトを読んで、すべてを理解しているわけではありませんが、レジストリキーの一部をプログラムとして実行しようとしている理由はわかりません。バッチスクリプトの何が問題になっていますか?どうすれば修正できますか。何らかの方法でMSIに変換し、全員に展開してこのオフィスをクリーンアップできるようにするにはどうすればよいですか。

または、必要なことを行うためのより良いソリューションまたは既存のMSIファイルを提案できますか?古いバージョンのJavaを使用してWebページをロードするエクスプロイトについて聞いたことがあり、それらを回避したいので、すべての古いバージョンのJavaをすべてのコンピューターから確実に削除したいだけです。


好奇心から、なぜあなたはこれをしたいのですか。Javaバージョンの非互換性により、私は痛みに終わりがありません(HPをご覧になっています)。私は、Javaの複数バージョンをインストールするためのスクリプトを書くために誘惑されると思いますどちらかといえば
ジム・Bに

3
セキュリティが第一の関心事です。古いバージョンのJVMは、最近の攻撃で非常に広く利用されています。Windows 7マシンでも影響を受けました。
ジョシュア

1
セキュリティのために。私は過去数時間で最新のJavaをオフィス全体に正常にデプロイしましたが、それらの古いバージョンはまだ残っています。スパイウェアをインストールするために、インストールされていたがマシンに休止している古いバージョンのJavaを使用できたエクスプロイトについて聞いたことがあります。
リケット

ここで私はちょうど見つけ、別のアプローチがあります:ivan.dretvic.com/2011/02/...は
クレイグ・リンガー

回答:


6

以下は私たちが使用するものであり、起動スクリプトとしてうまく機能します:

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

それは素晴らしいことです!古いJavaバージョンはまだクリーンアップしていないので、これをスタートアップスクリプトに統合すると思います。共有してくれてありがとう!
リケット

8

この行は、JAVAのすべてのバージョンをアンインストールします。

「 'Java %% %%'のような名前」がuninstall / nointeractiveを呼び出すwmic製品


ありがとうございました。これは私のシステムでうまく機能します。この1つのコマンドで、Java 7とJava 8の両方のバージョンが削除されました。
マイケルS. 14年

ありがとう!これは、すべての古いJavaバージョンを削除するのに最適なコマンドです。管理者権限で実行することを確認する必要があります。
PatricK

1

抜粋:http : //www.java.com/en/download/faq/remove_olderversions.xml

時間が経つにつれて、利用可能なJavaコンテンツを実行するためにJavaの複数のバージョンをインストールした可能性があります。以前は、各Java更新プログラムはシステムの個別のディレクトリにインストールされていました。 ただし、Javaの更新は単一のディレクトリにインストールされるようになりました。

Javaの古いバージョンを削除する必要がありますか?Javaの古いバージョンをすべてシステムから削除することを強くお勧めします。サポートされていない古いバージョンのJavaをシステムに保持すると、重大なセキュリティリスクが生じます。システムから古いバージョンのJavaを削除すると、Javaアプリケーションがシステム上で最新のセキュリティとパフォーマンスの改善で実行されることが保証されます。

理論的には、以前のバージョンのJavaを適切に削除する次のVBScriptを見つけました。他の人がそれを完璧に微調整しているので、ボトムアップから読むのが最善です:

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


「ボトムアップから読むのがベスト」-その場合、ここに最高のスクリプトをコピーする必要があります
jcollum 14年

1

このシンプルだが非常に便利なコマンドを確認してください。

wmic product where "name like 'Java(TM) 6%%'" call uninstall /nointeractive

ここから盗まれ


0

ここには、msiなしでグループポリシーを介して展開できるvbscriptコードがいくつかあります。


0

トップ投票の検証済みの回答にはいくつかの問題があります。私のテストでは、6.0シリーズのCLSIDは正しくありません。

以下に、各JREシリーズで動作することがわかったCLSIDを示します。削除するバージョンのxxを置き換えます。/server//a/187552/172014で使用してください

4.2_xx
{7148F0A8-6813-11D6-A77B-00B0D0142xx0}

5.0_xx
{3248F0A8-6813-11D6-A77B-00B0D0150xx0}

6.0_xx
{26A24AE4-039D-4CA4-87B4-2F832160xxF0}

7.0_xx
{26A24AE4-039D-4CA4-87B4-2F832170xxF0}

1.4.2シリーズのJRE MSIが再起動する場合に備えて、/ qの後に/ norestartを追加することをお勧めします。

msiexec /x <insert_CLSID_here> /q /norestart

0

バッチスクリプトを使用しても引き続き実行できます。次のスクリプトを使用します。

@ECHO OFF
REM #######################################################
REM AUTHOR: HeyVooN
REM BLOG: http://blog.teksoporte.es
REM DATE CREATED: 09/04/2015
REM Deploy Java to your Enterprise
REM This script is optimised for 32 and 64 Bit versions of Java to be installed on either 32 or 64 bit
REM operating systems. It can easily accommodate 64 bit versions of Java.
REM This script removes all previous versions of Java installed prior to (re)install any version.
REM #######################################################

REM #######################################################
REM SECTION 1 - CLEAN UP PC BEFORE INSTALLING JAVA (This section is not mandatory)
REM #######################################################
ECHO -------------------------------------------------------
ECHO STOP PROCESSES
ECHO -------------------------------------------------------
REM Assuming that processes using Java are stopped before uninstalling existing versions of Java
REM Common processes using Java: firefox.exe, iexplore.exe, chrome.exe, jusched.exe, jucheck.exe, java.exe, javacpl.exe

sc config "UI0Detect" start= disabled
sc stop UI0Detect
taskkill /F /IM jusched.exe /T
taskkill /F /IM jucheck.exe /T
taskkill /F /IM java.exe /T

ECHO -------------------------------------------------------
ECHO UNISTALL ANY PREVIOUS VERSIONS OF JAVA 32 Bit
ECHO -------------------------------------------------------
SET jver="Java 7"
SET regVar32=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
SET myCMD=REG QUERY %regVar32% /s /f %jver%
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO (
 ECHO Uninstall Key: {%%i}
 ECHO Condition: %uinstallState%
 START /WAIT MSIEXEC /x {%%i} /qn /norestart
  )

ECHO -------------------------------------------------------
ECHO UNISTALL ANY PREVIOUS VERSIONS OF JAVA 64 Bit
ECHO -------------------------------------------------------
SET jver="Java 7"
SET regVar64=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
SET myCMD=REG QUERY %regVar64% /s /f %jver%
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO (
 ECHO Uninstall Key: {%%i}
 ECHO Condition: %uinstallState%
 START /WAIT MSIEXEC /x {%%i} /qn /norestart
  )

ECHO -------------------------------------------------------
ECHO CLEANING REGISTRY
ECHO -------------------------------------------------------
REM Removing known problem registry keys. I use the below line to SET the variable of which reg.exe to use depending on OS architecture.
REM Additional registry removal strings can be added here.
@If Defined ProgramFiles(x86) (SET "Reg32Path=%SystemRoot%\SysWOW64\reg.exe") Else (SET "Reg32Path=%SystemRoot%\System32\reg.exe")
REM %Reg32Path% DELETE HKLM\SOFTWARE\JavaSoft /va /f
%Reg32Path% DELETE "HKLM\SOFTWARE\JavaSoft\Auto Update" /va /f
%Reg32Path% DELETE "HKLM\SOFTWARE\JavaSoft\Java Update" /va /f

ECHO -------------------------------------------------------
ECHO DELETE START MENU ITEMS
ECHO -------------------------------------------------------
RD /s /q "%ProgramData%\Microsoft\Windows\Start Menu\Programs\Java"
PAUSE
EXIT /B 0

ニーズに合わせて希望の方法に適応/変更できます。;-)


システム管理者であれば、警告なしにこれを実行しないでください。Javaをシステム全体で強制終了すると、一部の人々が混乱します。たとえば、私は毎日Eclipseを使用していますが、一部の人々はOpenOffice / LibreOfficeを使用しています。私の質問(5年前)は、すべてのコンピューターで実行され、古いバージョンのJavaをアンインストールするスクリプトをサイレントに展開する方法を探していたためです。だから明らかにこれはうまくいかないだろう、または少なくともタスクキルの行を削除するだろう。
リケット

0

これは私のために働いた。最新バージョン(執筆時点ではv8.0.66)より前のすべてのバージョンのJava(32ビットおよび64ビット)がアンインストールされます。

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.