11.01.2013

Alle Java-Versionen per Skript deinstallieren

Aus der Abteilung "Skripte, die die Welt nicht braucht" anlässlich der wiederholten kritischen Sicherheitslücken in der Java Runtime hier ein Skript, mit dem man unter Windows sämtliche Versionen der JRE und JDK deinstallieren kann. Wie im Artikel berichtet, ist es nicht ganz einfach, die JRE nur im Browser abzuschalten, deshalb wird die komplette Deinstallation empfohlen, wenn man es nicht wirklich braucht.

Das Skript (cmd) ruft eine Hilfsfunktion in VBS auf, um die Registry nach dem Uninstall-Befehl zu durchsuchen; das VBS generiert gleich ein passendes Skript in cmd-Syntax, das dann vom Hauptskript aufgerufen wird.
Beide Skripte (uninstall-java.cmd und .vbs) kann man dann auf ein Netzlaufwerk legen oder mit einem USB-Stick von jedem betroffenen PC aus starten, um alle JRE- und JDK-Instanzen zu entfernen. Wenn auf dem Netzlaufwerk keine Schreibrechte sind, muss das .cmd leicht angepasst werden und die temporäre Datei z.B. in %TEMP% angelegt werden. Ich hab's in meinem Fall gern, dass die Uninstall-Befehle in diesem Verzeichnis bleiben.
[Update: die Schreibrechte werden im .cmd benötigt, nicht im .vbs]

uninstall-java.vbs

const HKEY_LOCAL_MACHINE=&H80000002
Set StdOut=WScript.StdOut
Set StdErr=WScript.StdErr

Set o=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")

Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

o.EnumKey HKEY_LOCAL_MACHINE, Key, SubKeys

For Each subkey In SubKeys
  o.GetStringValue HKEY_LOCAL_MACHINE,Key&"\"&subkey,"DisplayName",name
  name=" "&name
  if (Instr(name,"Development Kit")) Then
    StdErr.WriteLine "JDK "&name
  End If
  if (InStr(name,"Java(TM)") or InStr(name,"J2SE") or InStr(name,"Java ")) Then
  StdErr.WriteLine Key&"\"&subkey
    StdOut.WriteLine "@echo "&name
    o.GetStringValue HKEY_LOCAL_MACHINE,Key&"\"&subkey,"DisplayVersion",ver
    StdOut.WriteLine "REM "&subkey&" => JRE "&ver
    o.GetStringValue HKEY_LOCAL_MACHINE,Key&"\"&subkey,"UninstallString",uninst
    StdOut.WriteLine "REM "&uninst
    uninst=Replace(uninst,"/X","/passive /qb /X")
    uninst=Replace(uninst,"/I","/passive /qb /X")
    if (uninst <> "") Then
      StdOut.WriteLine uninst
    End If
  End If
Next

uninstall-java.cmd

@ECHO off
cd /D %~dp0
cscript //nologo //B uninstall-java.vbs > uninst-java-%COMPUTERNAME%.cmd 2> java-%COMPUTERNAME%.txt
call uninst-java-%COMPUTERNAME%.cmd