Batch-Datei zum Deinstallieren aller Sun Java-Versionen?


11

Ich richte ein System ein, um Java in unserem Büro auf dem neuesten Stand zu halten. Jeder hat alle verschiedenen Versionen von Java, von denen viele alt und unsicher sind und einige bis 1.4 zurückreichen. Ich habe einen System Center Essentials-Server, der eine MSI-Datei herausschieben und unbeaufsichtigt ausführen kann, und ich habe bereits getestet, dass er das neueste Java installieren kann. Aber alte Versionen (wie 1.4) werden vom Installationsprogramm nicht entfernt, daher muss ich sie deinstallieren. Auf jedem läuft Windows XP.

Der nette Zufall ist, dass Sun gerade von Oracle gekauft wurde und Oracle nun alle Instanzen von "Sun" in "Oracle" in Java geändert hat. Ich muss mich also bequemerweise nicht um die Deinstallation des neuesten Java kümmern, da ich einfach eine Suche durchführen und alle deinstallieren kann Sun Java-Programme kann.

Ich fand das folgende Batch-Skript in einem Forumsbeitrag, der vielversprechend aussah:

@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

Wenn ich das Skript ausführe, erhalte ich jedoch die folgende Ausgabe:

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.

Und dann scheint es zu hängen und ich drücke Strg-C, um es zu stoppen.

Beim Lesen des Skripts verstehe ich nicht alles, aber ich weiß nicht, warum versucht wird, Teile von Registrierungsschlüsseln als Programme auszuführen. Was ist los mit dem Batch-Skript? Wie kann ich das Problem beheben, damit ich es irgendwie in ein MSI verwandeln und für alle bereitstellen kann, um dieses Büro aufzuräumen?

Oder können Sie alternativ eine bessere Lösung oder eine vorhandene MSI-Datei vorschlagen, um das zu tun, was ich brauche? Ich möchte nur sicherstellen, dass alle alten Java-Versionen von allen Computern entfernt werden, da ich von Exploits gehört habe, die dazu führen, dass Webseiten mit alten Java-Versionen geladen werden, und ich möchte diese vermeiden.


aus neugier warum willst du das machen Die Inkompatibilität der Java-Version hat mir unermüdliche Schmerzen bereitet (HP, ich sehe dich an). Wenn überhaupt, wäre ich versucht, ein Skript zu schreiben, um mehrere Versionen von Java zu installieren
Jim B

3
Sicherheit wäre das Hauptanliegen. Veraltete Versionen von JVM wurden in den letzten Angriffen sehr häufig ausgenutzt. Sogar Windows 7-Computer waren betroffen.
Joshua

1
Absolut aus Sicherheitsgründen. Ich habe in den letzten Stunden das neueste Java erfolgreich im gesamten Büro bereitgestellt, aber diese älteren Versionen bleiben weiterhin erhalten. Ich habe von Exploits gehört, die eine ältere Version von Java verwenden konnten, die installiert war, aber auf einem Computer ruhte, um Spyware zu installieren, und ich möchte dies vermeiden, indem ich NUR das neueste Java auf den Computern habe.
Ricket

Hier ist ein weiterer Ansatz, den ich gerade gefunden habe: ivan.dretvic.com/2011/02/…
Craig Ringer

Antworten:


6

Folgendes verwenden wir, das sich hervorragend als Startskript eignet:

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

Das ist großartig! Ich habe die alten Java-Versionen noch nicht bereinigt, daher denke ich, dass ich dies in unser Startskript integrieren werde. Danke für das Teilen!
Ricket

8

Diese Zeile deinstalliert alle Versionen von JAVA:

wmic Produkt, bei dem "Name wie 'Java %% %%'" uninstall / nointeractive aufruft


Vielen Dank. Dies funktioniert gut auf meinem System. Mit diesem einzigen Befehl wurden sowohl meine Java 7- als auch meine Java 8-Versionen entfernt.
Michael S.

Vielen Dank! Dies ist die beste cmd zum Entfernen aller alten Java-Versionen. Sie müssen nur sicherstellen, dass es mit Administratorrechten ausgeführt wird.
PatricK

1

Auszug aus: http://www.java.com/de/download/faq/remove_olderversions.xml

Im Laufe der Zeit haben Sie möglicherweise mehrere Java-Versionen installiert, um verfügbaren Java-Inhalt auszuführen. In der Vergangenheit wurde jedes Java-Update in separaten Verzeichnissen auf Ihrem System installiert. Java-Updates werden jetzt jedoch in einem einzigen Verzeichnis installiert.

Sollte ich ältere Versionen von Java entfernen? Wir empfehlen Benutzern dringend, alle älteren Java-Versionen von Ihrem System zu entfernen. Das Beibehalten alter und nicht unterstützter Java-Versionen auf Ihrem System birgt ein ernstes Sicherheitsrisiko. Durch das Entfernen älterer Java-Versionen von Ihrem System wird sichergestellt, dass Java-Anwendungen mit den aktuellsten Sicherheits- und Leistungsverbesserungen auf Ihrem System ausgeführt werden.

Ich habe das folgende VBScript gefunden, das theoretisch frühere Versionen von Java ordnungsgemäß entfernt. Am besten von unten nach oben lesen , da andere es perfekt optimiert haben:

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


"Am besten von unten nach oben lesen" - in diesem Fall sollten Sie das beste Skript hierher
kopieren

1

Überprüfen Sie diesen einfachen, aber sehr nützlichen Befehl:

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

von hier gestohlen


0

Es gibt einige VBScript - Code hier , dass Sie in der Lage sein sollte , über Gruppenrichtlinien ohne msi einzusetzen.


0

Die am besten bewertete verifizierte Antwort weist einige Probleme auf. Die CLSIDs der 6.0-Serie sind aufgrund meiner Tests falsch.

Hier sind die CLSIDs, die ich für jede JRE-Serie gefunden habe. Ersetzen Sie xx durch die gewünschten Versionen, die Sie entfernen möchten. Bitte verwenden Sie mit /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}

Ich empfehle, / norestart auch nach / q hinzuzufügen, falls die JRE-MSIs der 1.4.2-Serie einen Neustart wünschen.

msiexec /x <insert_CLSID_here> /q /norestart

0

Sie können das Batch-Skript weiterhin verwenden. Ich benutze das folgende Skript;

@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

Sie können die gewünschte Art und Weise an Ihre Bedürfnisse anpassen / ändern. ;-);


Wenn Sie ein Systemadministrator sind, führen Sie dies nicht ohne Warnung aus. Das systemweite Erzwingen von Java wird einige Leute verärgern - zum Beispiel benutze ich Eclipse jeden Tag und einige Leute benutzen OpenOffice / LibreOffice. Ich erwähne dies nur, weil ich vor fünf Jahren nach einer Möglichkeit gesucht habe, ein Skript stillschweigend bereitzustellen, das auf jedem Computer ausgeführt wird, und alte Java-Versionen zu deinstallieren. So klar, dass dies nicht gut funktionieren würde, oder ich würde zumindest die Taskkill-Zeilen entfernen.
Ricket

0

Das hat bei mir funktioniert. Es deinstalliert alle Java-Versionen (32-Bit und 64-Bit) vor der neuesten Version (die zum Zeitpunkt des Schreibens Version 8.0.66 ist).

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.