web-dev-qa-db-ja.com

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

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

きちんとした偶然は、SunがOracleに買収されたばかりであり、OracleはJavaで「Sun」のすべてのインスタンスを「Oracle」に変更したことです。つまり、最新のJavaのアンインストールについて心配する必要はありません。検索を実行してすべてをアンインストールできるからですSunJavaプログラム。

私は フォーラム投稿 で次のバッチスクリプトを見つけました。

@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そして私はそれらを避けたいです。

11
Ricket

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

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
6
edusysadmin

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

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

8
user154791

抜粋: 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

1
Paulie D

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

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

こちら から盗まれた

1
higuita

Msiなしでグループポリシーを介して展開できるはずのvbscriptコード here があります。

0
nedm

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

@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

あなたはあなたのニーズに合わせたい方法を適応/変更することができます。 ;-)

0
Heyvoon

上位投票の確認済み回答にはいくつかの問題があります。テストに基づいて、6.0シリーズのCLSIDは正しくありません。

これが、各JREシリーズで機能することがわかったCLSIDです。削除したい目的のバージョンのxxを置き換えます。 https://serverfault.com/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
CrimsonKnight13

これでうまくいきました。最新バージョン(執筆時点ではv8.0.66)より前のJava(32ビットおよび64ビット))のすべてのバージョンをアンインストールします。

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
0
Reado