File batch per disinstallare tutte le versioni di Sun Java?


11

Sto installando un sistema per mantenere aggiornato Java nel nostro ufficio. Ognuno ha tutte le diverse versioni di Java, molte delle quali vecchie e insicure, e alcune risalenti al 1.4. Ho un server System Center Essentials che può eseguire il pushout e l'esecuzione silenziosa di un file .msi e ho già testato che può installare l'ultima versione di Java. Ma le vecchie versioni (come la 1.4) non vengono rimosse dal programma di installazione, quindi devo disinstallarle. Tutti eseguono Windows XP.

La netta coincidenza è che Sun è stata appena acquistata da Oracle e Oracle ha ora cambiato tutte le istanze di "Sun" in "Oracle" in Java. Quindi, posso comodamente non dovermi preoccupare di disinstallare l'ultimo Java, perché posso solo fare una ricerca e disinstallare tutti i programmi Sun Java.

Ho trovato il seguente script batch in un post sul forum che sembrava promettente:

@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

Tuttavia, quando eseguo lo script, ottengo il seguente output:

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.

E poi sembra bloccarsi e io ctrl-c per fermarlo.

Leggendo lo script, non capisco tutto, ma non so perché stia cercando di eseguire pezzi di chiavi di registro come programmi. Cosa c'è di sbagliato nello script batch? Come posso ripararlo, in modo da poter passare in qualche modo trasformandolo in un MSI e distribuendolo a tutti per ripulire questo ufficio?

O in alternativa, puoi suggerire una soluzione migliore o un file MSI esistente per fare ciò di cui ho bisogno? Voglio solo assicurarmi di rimuovere tutte le vecchie versioni di Java dai computer di tutti, dal momento che ho sentito parlare di exploit che causano il caricamento di pagine Web utilizzando vecchie versioni di Java e voglio evitarle.


per curiosità perché vuoi farlo. L'incompatibilità della versione Java non mi ha causato problemi (HP ti sto guardando). Semmai sarei tentato di scrivere uno script per installare più versioni di Java
Jim B,

3
La sicurezza sarebbe la preoccupazione principale. Versioni obsolete di JVM sono state sfruttate in modo molto popolare negli ultimi attacchi. Anche le macchine Windows 7 sono state colpite.
Joshua,

1
Assolutamente per sicurezza. Nelle ultime due ore ho distribuito con successo l'ultima Java in tutto l'ufficio, ma quelle versioni precedenti rimangono ancora. Ho sentito parlare di exploit in grado di utilizzare una versione precedente di Java installata ma inattiva su una macchina, al fine di installare spyware, e voglio evitare tutto ciò avendo SOLO l'ultima Java sui computer.
Ricket,

Ecco un altro approccio che ho appena trovato: ivan.dretvic.com/2011/02/…
Craig Ringer

Risposte:


6

Quello che segue è ciò che usiamo, funziona alla grande come uno script di avvio:

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

È fantastico! Non ho ancora ripulito le vecchie versioni di Java, quindi penso che dovrò integrarlo nel nostro script di avvio. Grazie per la condivisione!
Ricket,

8

Questa linea disinstallerà tutte le versioni di JAVA:

prodotto wmic in cui "nome come 'Java %% %%'" chiama uninstall / nointeractive


Grazie. Questo funziona bene sul mio sistema. Ha rimosso sia la mia Java 7 che entrambe le mie versioni di Java 8 con questo singolo comando.
Michael S.

Grazie! Questo è il cmd migliore per rimuovere tutte le vecchie versioni java. Devo solo assicurarti che sia Esegui con privilegio di amministratore.
PatricK

1

Estratto da: http://www.java.com/en/download/faq/remove_olderversions.xml

Nel tempo, potresti aver installato più versioni di Java per eseguire il contenuto Java disponibile. In passato, ogni aggiornamento di Java era installato in directory separate sul sistema. Tuttavia, gli aggiornamenti Java sono ora installati in una singola directory.

Devo rimuovere le versioni precedenti di Java? Consigliamo vivamente agli utenti di rimuovere dal sistema tutte le versioni precedenti di Java. Mantenere versioni vecchie e non supportate di Java sul sistema presenta un serio rischio per la sicurezza. La rimozione di versioni precedenti di Java dal sistema garantisce che le applicazioni Java vengano eseguite con i miglioramenti più recenti di sicurezza e prestazioni sul sistema.

Ho trovato il seguente VBScript che, in teoria, rimuove correttamente le versioni precedenti di Java. Meglio leggere dal basso verso l'alto , poiché altri lo hanno modificato alla perfezione:

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


"Meglio leggere dal basso" - in tal caso dovresti copiare il miglior copione qui
jcollum

1

Controlla questo comando semplice ma molto utile:

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

rubato da qui


0

C'è un codice vbscript qui che dovresti essere in grado di distribuire tramite Criteri di gruppo senza un msi.


0

La risposta verificata più votata presenta alcuni problemi. I CLSID serie 6.0 non sono corretti in base ai miei test.

Ecco i CLSID che ho trovato funzionare per ogni serie JRE. Sostituisci xx per le versioni desiderate che desideri rimuovere. Utilizzare con /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}

Consiglio di aggiungere / norestart dopo / q anche nel caso in cui gli MSI JRE della serie 1.4.2 desiderino riavviare.

msiexec /x <insert_CLSID_here> /q /norestart

0

Puoi ancora realizzare utilizzando lo script Batch. Uso il seguente script;

@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

È possibile adattare / modificare il modo in cui si desidera soddisfare le proprie esigenze. ;-)


Se sei un amministratore di sistema, non eseguirlo senza un avviso. L'uccisione forzata di Java a livello di sistema farà arrabbiare alcune persone, ad esempio utilizzo Eclipse ogni giorno e alcune persone usano OpenOffice / LibreOffice. Lo dico solo perché la mia domanda (cinque anni fa) ero io che cercavo un modo per distribuire silenziosamente uno script che potesse essere eseguito sul computer di tutti e disinstallare le vecchie versioni di Java. Quindi chiaramente questo non farebbe bene, o rimuoverei almeno le linee di taskkill.
Ricket,

0

Questo ha funzionato per me. Disinstalla tutte le versioni di Java (32-bit e 64-bit) precedenti all'ultima versione (che è v8.0.66 al momento della scrittura).

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.