Fichier batch pour désinstaller toutes les versions de Sun Java?

11

Je mets en place un système pour garder Java dans notre bureau à jour. Tout le monde a toutes les différentes versions de Java, beaucoup d'entre elles sont anciennes et peu sûres, et certaines remontent à 1,4. J'ai un serveur System Center Essentials qui peut pousser et exécuter silencieusement un fichier .msi, et j'ai déjà testé qu'il pouvait installer la dernière version de Java. Mais les anciennes versions (telles que 1.4) ne sont pas supprimées par le programme d'installation, je dois donc les désinstaller. Tout le monde exécute Windows XP.

La coïncidence intéressante est que Sun vient d'être acheté par Oracle et Oracle a maintenant changé toutes les instances de "Sun" en "Oracle" en Java. Ainsi, je ne peux pas m'inquiéter de la désinstallation de la dernière version de Java, car je peux simplement faire une recherche et désinstaller tous les programmes Sun Java.

J'ai trouvé le script batch suivant sur un post de forum qui semblait prometteur:

@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

Cependant, lorsque j'exécute le script, j'obtiens la sortie suivante:

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.

Et puis il semble se bloquer et je ctrl-c pour l'arrêter.

En lisant le script, je ne comprends pas tout, mais je ne sais pas pourquoi il essaie d'exécuter des morceaux de clés de registre en tant que programmes. Quel est le problème avec le script batch? Comment puis-je le réparer, afin de pouvoir le transformer en quelque sorte en MSI et le déployer à tout le monde pour nettoyer ce bureau?

Ou bien, pouvez-vous suggérer une meilleure solution ou un fichier MSI existant pour faire ce dont j'ai besoin? Je veux juste m'assurer de retirer toutes les anciennes versions de Java des ordinateurs de tout le monde, car j'ai entendu parler d'exploits qui provoquent le chargement de pages Web à l'aide d'anciennes versions de Java et je veux les éviter.

Ricket
la source
par curiosité pourquoi voulez-vous faire cela. L'incompatibilité de la version Java ne m'a pas causé de douleur (HP je vous regarde). Si quelque chose, je serais tenté d'écrire un script pour installer plusieurs versions de Java
Jim B
3
La sécurité serait la principale préoccupation. Des versions obsolètes de JVM ont été très largement exploitées lors d'attaques récentes. Même les machines Windows 7 ont été touchées.
Joshua
1
Absolument pour la sécurité. Au cours des dernières heures, j'ai déployé avec succès le dernier Java dans tout le bureau, mais ces anciennes versions restent. J'ai entendu parler d'exploits qui pouvaient utiliser une ancienne version de Java installée mais dormante sur une machine, afin d'installer des logiciels espions, et je veux éviter tout cela en ayant UNIQUEMENT le dernier Java sur les ordinateurs.
Ricket
Voici une autre approche que je viens de trouver: ivan.dretvic.com/2011/02/…
Craig Ringer

Réponses:

6

Ce qui suit est ce que nous utilisons, fonctionne très bien comme script de démarrage:

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
edusysadmin
la source
C'est génial! Je n'ai pas encore nettoyé les anciennes versions de Java, donc je pense que je vais l'intégrer dans notre script de démarrage. Merci d'avoir partagé!
Ricket
8

Cette ligne désinstallera toutes les versions de JAVA:

produit wmic où "nom comme 'Java %% %%'" appelle désinstallation / non interactif

user154791
la source
Je vous remercie. Cela fonctionne bien sur mon système. Il a supprimé à la fois mon Java 7 ainsi que mes deux versions de Java 8 avec cette seule commande.
Michael S.
Merci! C'est le meilleur cmd pour supprimer toutes les anciennes versions de java. Il suffit de s'assurer qu'il est exécuté avec le privilège Administrateur.
PatricK
1

Extrait de: http://www.java.com/en/download/faq/remove_olderversions.xml

Au fil du temps, vous pouvez avoir installé plusieurs versions de Java pour exécuter le contenu Java disponible. Dans le passé, chaque mise à jour Java était installée dans des répertoires distincts sur votre système. Cependant, les mises à jour Java sont désormais installées dans un seul répertoire.

Dois-je supprimer les anciennes versions de Java? Nous recommandons vivement aux utilisateurs de supprimer toutes les anciennes versions de Java de votre système. La conservation de versions anciennes et non prises en charge de Java sur votre système présente un grave risque pour la sécurité. La suppression des anciennes versions de Java de votre système garantit que les applications Java fonctionneront avec les améliorations de sécurité et de performances les plus à jour sur votre système.

J'ai trouvé le VBScript suivant qui, en théorie, supprime correctement les versions précédentes de Java. Mieux vaut lire de bas en haut , car d'autres l'ont peaufiné à la perfection:

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

Paulie D
la source
"Mieux à lire de bas en haut" - dans ce cas, vous devez copier le meilleur script ici
jcollum
1

Vérifiez cette commande simple mais très utile:

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

volé d' ici

higuita
la source
0

Il y a du code vbscript ici que vous devriez pouvoir déployer via la stratégie de groupe sans msi.

nedm
la source
0

La réponse vérifiée la plus votée présente certains problèmes. Les CLSID de la série 6.0 sont incorrects d'après mes tests.

Voici les CLSID que j'ai trouvés pour fonctionner pour chaque série JRE. Remplacez xx pour les versions souhaitées que vous souhaitez supprimer. Veuillez utiliser avec /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}

Je recommande également d'ajouter / norestart après / q au cas où les MSI JRE de la série 1.4.2 souhaitent un redémarrage.

msiexec /x <insert_CLSID_here> /q /norestart
CrimsonKnight13
la source
0

Vous pouvez toujours accomplir en utilisant le script Batch. J'utilise le script suivant;

@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

Vous pouvez adapter / modifier la façon dont vous souhaitez répondre à vos besoins. ;-)

Heyvoon
la source
Si vous êtes administrateur système, ne l'exécutez pas sans avertissement. Tuer de force Java à l'échelle du système va bouleverser certaines personnes - par exemple, j'utilise Eclipse tous les jours, et certaines personnes utilisent OpenOffice / LibreOffice. Je ne mentionne cela que parce que ma question (il y a cinq ans) était que je cherchais un moyen de déployer silencieusement un script qui s'exécuterait sur l'ordinateur de tout le monde et désinstaller les anciennes versions de Java. Donc, clairement, celui-ci ne ferait pas bien, ou je supprimerais au moins les lignes de tâche.
Ricket
0

Cela a fonctionné pour moi. Il désinstalle toutes les versions de Java (32 bits et 64 bits) avant la dernière version (qui est la v8.0.66 au moment de la rédaction).

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