View difference between Paste ID: P6Lk4r4p and niBQX0CS
SHOW: | | - or go back to the newest paste.
1-
:: Purpose:         Nukes ALL versions of the Java Runtime, series 2 through 7, x86 and x64, and JavaFX
1+
:: Purpose:       Nuke ALL versions of the Java Runtime, series 3 through 7, x86 and x64, and JavaFX
2-
::                  Leaves Java Development Kit installations intact. Puts the lotion on its skin.
2+
::                Leaves Java Development Kit installations intact. Puts the lotion on its skin.
3-
:: Requirements:    Run this script with a network admin account
3+
:: Requirements:  local admin rights
4-
:: Author:          vocatus on reddit.com/r/sysadmin and /r/usefulscripts
4+
:: Author:        vocatus on reddit.com/r/sysadmin and /r/usefulscripts
5-
:: History:         1.1 + Massive overhaul of functionality and logging
5+
::                additional thanks to: 
6-
::                  1.0   Initial write
6+
::                 - reddit.com/user/cannibalkitteh  for additional registry cleaning locations
7
::                 - forums.oracle.com/people/mattmn for a lot of stuff from his Java removal script
8
:: History:       1.2 + Added a lot more comments, so you can see what's happening if you so desire
9
::                    + Major overhaul to WMIC uninstallation section:
10-
set VERSION=1.1
10+
::                       - Now wildcard-matches ALL JRE GUIDs, including future revisions to current products (3-7)
11-
set UPDATED=2013-07-12
11+
::                       - Vastly improved WMIC wildcard matching precision
12
::                    + Major overhaul to file and directory section, thanks to 'mattmn' on the Oracle forums
13
::                    + Added additional registry location cleaning, thanks to /u/cannibalkitteh for the suggestion
14
::                       - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
15
::                       - HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
16
::                    + Added Chrome to the list of browsers to kill before starting
17
::                    * Logging improvements
18
::                    / Switched all browser and Java kill lines to use /T flag (terminate child processes)
19
::                1.1 + Massive overhaul of functionality and logging
20
::                1.0   Initial write
21
22
:: Prep
23
@echo off
24
set VERSION=1.2
25
set UPDATED=2013-07-13
26
27
:::::::::::::::
28-
:: ================================================================================= ::
28+
29-
:: Don't touch anything below this line. If you do, somewhere a small puppy will die ::
29+
30-
:: ================================================================================= ::
30+
31
::  * NO quotes!                       (bad:  "c:\directory\path"       )
32
::  * NO trailing slashes on the path! (bad:   c:\directory\            )
33
::  * Spaces are okay                  (okay:  c:\my folder\with spaces )
34
::  * Network paths are okay           (okay:  \\server\share name      )
35
::                                     (       \\172.16.1.5\share name  )
36
37
:: Log settings
38
set LOGPATH=%SystemDrive%\Logs
39
set LOGFILE=%COMPUTERNAME%_java_runtime_removal.log
40
41
42
:: =============================================================================== ::
43
:: Everything below this line is similar to a feral badger: Look, but Do Not Touch ::
44
:: =============================================================================== ::
45
46
:: Create the log directory if it doesn't exist
47-
echo %CUR_DATE% %TIME%   Beginning removal of Java Runtimes (v2-7, x86 and x64) and JavaFX...>> %LOGPATH%\%LOGFILE%
47+
48-
echo %CUR_DATE% %TIME%   Beginning removal of Java Runtimes (v2-7, x86 and x64) and JavaFX...
48+
49
:: Get the date into a format we can use (ISO standard date format)
50
set CUR_DATE=%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%
51-
echo %CUR_DATE% %TIME%   Killing all browsers and running Java instances first...>> %LOGPATH%\%LOGFILE%
51+
52-
echo %CUR_DATE% %TIME%   Killing all browsers and running Java instances first...
52+
53
::::::::::
54-
taskkill /F /IM iexplorer.exe >> %LOGPATH%\%LOGFILE%
54+
55-
taskkill /F /IM iexplore.exe >> %LOGPATH%\%LOGFILE%
55+
56-
taskkill /F /IM javaw.exe >> %LOGPATH%\%LOGFILE%
56+
57-
taskkill /F /IM java.exe >> %LOGPATH%\%LOGFILE%
57+
58-
taskkill /F /IM jqs.exe >> %LOGPATH%\%LOGFILE%
58+
59-
taskkill /F /IM jusched.exe >> %LOGPATH%\%LOGFILE%
59+
60
echo.
61
echo %CUR_DATE% %TIME%   Beginning removal of Java Runtimes (series 3-7, x86 and x64) and JavaFX...>> "%LOGPATH%\%LOGFILE%"
62
echo %CUR_DATE% %TIME%   Beginning removal of Java Runtimes (series 3-7, x86 and x64) and JavaFX...
63
64-
:: UNINSTALLER SECTION ::
64+
65
echo %CUR_DATE% %TIME%   Killing all running browsers and Java instances first...>> "%LOGPATH%\%LOGFILE%"
66
echo %CUR_DATE% %TIME%   Killing all running browsers and Java instances first...
67-
echo %CUR_DATE% %TIME%   Attempting regular uninstallation via WMIC wildcard method...>> %LOGPATH%\%LOGFILE%
67+
68-
echo %CUR_DATE% %TIME%   Attempting regular uninstallation via WMIC wildcard method...
68+
taskkill /f /im java.exe /T >> "%LOGPATH%\%LOGFILE%"
69
taskkill /f /im javaw.exe /T >> "%LOGPATH%\%LOGFILE%"
70-
wmic product where "name like '%%J2SE Runtime%%'" call uninstall /nointeractive >> %LOGPATH%\%LOGFILE%
70+
taskkill /f /im javaws.exe /T >> "%LOGPATH%\%LOGFILE%"
71-
wmic product where "name like 'Java 2 Runtime%%'" call uninstall /nointeractive >> %LOGPATH%\%LOGFILE%
71+
taskkill /f /im jqs.exe /T >> "%LOGPATH%\%LOGFILE%"
72-
wmic product where "name like 'Java%%Runtime%%'" call uninstall /nointeractive >> %LOGPATH%\%LOGFILE%
72+
taskkill /f /im jusched.exe /T >> "%LOGPATH%\%LOGFILE%"
73-
wmic product where "name like 'Java(TM) 6 Update%%'" call uninstall /nointeractive >> %LOGPATH%\%LOGFILE%
73+
taskkill /f /im iexplore.exe /T >> "%LOGPATH%\%LOGFILE%"
74-
wmic product where "name like 'Java%%TM%%7 Update%%'" call uninstall /nointeractive >> %LOGPATH%\%LOGFILE%
74+
taskkill /f /im iexplorer.exe /T >> "%LOGPATH%\%LOGFILE%"
75-
wmic product where "name like 'Java 7 Update%%'" call uninstall /nointeractive >> %LOGPATH%\%LOGFILE%
75+
taskkill /f /im firefox.exe /T >> "%LOGPATH%\%LOGFILE%"
76-
wmic product where "name like 'JavaFX%%'" call uninstall /nointeractive
76+
taskkill /f /im chrome.exe /T >> "%LOGPATH%\%LOGFILE%"
77-
echo %CUR_DATE% %TIME%   Regular uninstallers done.
77+
78
79
80
:::::::::::::::::::::::::
81-
:: REGISTRY CLEANUP ::
81+
:: UNINSTALLER SECTION :: -- Basically here we just brute-force every "normal" method for
82
:::::::::::::::::::::::::    removing Java, before resorting to more painstaking methods later
83-
:: Search for leftover registry keys
83+
84-
echo %CUR_DATE% %TIME%   Commencing registry cleanup...>> %LOGPATH%\%LOGFILE%
84+
echo %CUR_DATE% %TIME%   Targeting individual JRE versions...>> "%LOGPATH%\%LOGFILE%"
85
echo %CUR_DATE% %TIME%   Targeting individual JRE versions...
86-
echo %CUR_DATE% %TIME%   Searching for residual Java Runtime registry keys...>> %LOGPATH%\%LOGFILE%
86+
87-
echo %CUR_DATE% %TIME%   Searching for residual Java Runtime registry keys...
87+
88-
reg query HKLM\software\classes\installer\products /f "J2SE" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\deljava.txt
88+
:: Okay, so all JRE runtimes (series 4-7) use product GUIDs, with certain numbers that increment with each new update (e.g. Update 25)
89-
reg query HKLM\software\classes\installer\products /f "Java(tm) 6" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\deljava.txt
89+
:: This makes it easy to catch ALL of them through liberal use of WMIC wildcards ("_" is single character, "%" is any number of characters)
90-
reg query HKLM\software\classes\installer\products /f "Java 7" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\deljava.txt
90+
:: Additionally, JRE 6 introduced 64-bit runtimes, so in addition to the two-digit Update revision number (e.g. update 34), we also now 
91-
reg query HKLM\software\classes\installer\products /f "Java*Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\deljava.txt
91+
:: check for the architecture type, which always equals '32' or '64'. First wildcard is the architecture, second is the revision/update number.
92
93
:: JRE 7
94-
echo %CUR_DATE% %TIME%   Listing residual keys...>> %LOGPATH%\%LOGFILE%
94+
echo %CUR_DATE% %TIME%   JRE 7...>> "%LOGPATH%\%LOGFILE%"
95-
echo %CUR_DATE% %TIME%   Listing residual keys...
95+
echo %CUR_DATE% %TIME%   JRE 7...
96-
echo.>> %LOGPATH%\%LOGFILE%
96+
wmic product where "IdentifyingNumber like '{26A24AE4-039D-4CA4-87B4-2F8__170__FF}'" call uninstall /nointeractive >> "%LOGPATH%\%LOGFILE%"
97
98-
type %temp%\deljava.txt>> %LOGPATH%\%LOGFILE%
98+
:: JRE 6
99-
type %temp%\deljava.txt
99+
echo %CUR_DATE% %TIME%   JRE 6...>> "%LOGPATH%\%LOGFILE%"
100-
echo.>> %LOGPATH%\%LOGFILE%
100+
echo %CUR_DATE% %TIME%   JRE 6...
101
:: 1st line is for updates 23-xx, after 64-bit runtimes were introduced.
102
:: 2nd line is for updates 1-22, before Oracle released 64-bit JRE 6 runtimes
103
wmic product where "IdentifyingNumber like '{26A24AE4-039D-4CA4-87B4-2F8__160__FF}'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
104-
echo %CUR_DATE% %TIME%   Backing up keys...>> %LOGPATH%\%LOGFILE%
104+
wmic product where "IdentifyingNumber like '{3248F0A8-6813-11D6-A77B-00B0D0160__0}'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
105
106
:: JRE 5
107
echo %CUR_DATE% %TIME%   JRE 5...>> "%LOGPATH%\%LOGFILE%"
108-
for /f "tokens=* delims= " %%a in (%TEMP%\deljava.txt) do (reg query %%a) >> %TEMP%\java_purge_registry_backup\java_reg_keys_1.bak
108+
echo %CUR_DATE% %TIME%   JRE 5...
109-
reg export "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" "%TEMP%\java_purge_registry_backup\java_reg_keys_2.reg" >> %LOGPATH%\%LOGFILE%
109+
wmic product where "IdentifyingNumber like '{3248F0A8-6813-11D6-A77B-00B0D0150__0}'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
110-
reg export "HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\JavaSoft\Java Runtime Environment" "%TEMP%\java_purge_registry_backup\java_reg_keys_3.reg" >> %LOGPATH%\%LOGFILE%
110+
111
:: JRE 4
112-
echo %CUR_DATE% %TIME%   Residual keys backed up to %TEMP%\java_purge_registry_backup\ >> %LOGPATH%\%LOGFILE%
112+
echo %CUR_DATE% %TIME%   JRE 4...>> "%LOGPATH%\%LOGFILE%"
113-
echo %CUR_DATE% %TIME%   Residual keys backed up to %TEMP%\java_purge_registry_backup\
113+
echo %CUR_DATE% %TIME%   JRE 4...
114-
echo %CUR_DATE% %TIME%   This directory will be deleted at next reboot, so get it now if you need it! >> %LOGPATH%\%LOGFILE%
114+
wmic product where "IdentifyingNumber like '{7148F0A8-6813-11D6-A77B-00B0D0142__0}'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
115
116
:: JRE 3
117-
:: Purge leftover registry keys
117+
echo %CUR_DATE% %TIME%   JRE 3 (AKA Java 2 Runtime v1.3.xx)...>> "%LOGPATH%\%LOGFILE%"
118-
echo %CUR_DATE% %TIME%   Purging keys...>> %LOGPATH%\%LOGFILE%
118+
echo %CUR_DATE% %TIME%   JRE 3 (AKA Java 2 Runtime v1.3.xx)...
119
:: This version is so old we have to resort to a different method of removing it
120
:: Java 2 Runtime Environment Standard Edition v1.3.1_25-00
121-
for /f "tokens=* delims= " %%a in (%TEMP%\deljava.txt) do reg delete %%a /f >> %LOGPATH%\%LOGFILE%
121+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_25\Uninst.isu" -a
122-
del /S /Q %TEMP%\deljava.txt
122+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_24\Uninst.isu" -a
123-
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /f >> %LOGPATH%\%LOGFILE%
123+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_23\Uninst.isu" -a
124-
reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\JavaSoft\Java Runtime Environment" /f >> %LOGPATH%\%LOGFILE%
124+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_22\Uninst.isu" -a
125
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_21\Uninst.isu" -a
126-
echo %CUR_DATE% %TIME%   Residual keys purged. Registry cleanup done.>> %LOGPATH%\%LOGFILE%
126+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_20\Uninst.isu" -a
127-
echo %CUR_DATE% %TIME%   Residual keys purged. Registry cleanup done.
127+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_19\Uninst.isu" -a
128
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_18\Uninst.isu" -a
129
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_17\Uninst.isu" -a
130-
:::::::::::::::::::
130+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_16\Uninst.isu" -a
131-
:: FILE CLEANUP  ::
131+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_15\Uninst.isu" -a
132-
:::::::::::::::::::
132+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_14\Uninst.isu" -a
133-
echo %CUR_DATE% %TIME%   Commencing file and directory cleanup...>> %LOGPATH%\%LOGFILE%
133+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_13\Uninst.isu" -a
134
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_12\Uninst.isu" -a
135
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_11\Uninst.isu" -a
136
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_10\Uninst.isu" -a
137-
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles(x86)%\jre*" directories...>> %LOGPATH%\%LOGFILE%
137+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_09\Uninst.isu" -a
138-
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles(x86)%\jre*" directories...
138+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_08\Uninst.isu" -a
139-
FOR /D /R "%ProgramFiles(x86)%\Java\" %%X IN (j2re*) DO RMDIR /S /Q "%%X">> %LOGPATH%\%LOGFILE%
139+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_07\Uninst.isu" -a
140-
FOR /D /R "%ProgramFiles(x86)%\Java" %%X IN (jre*) DO RMDIR /S /Q "%%X">> %LOGPATH%\%LOGFILE%
140+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_06\Uninst.isu" -a
141
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_05\Uninst.isu" -a
142
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_04\Uninst.isu" -a
143-
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles%\jre*" directories...>> %LOGPATH%\%LOGFILE%
143+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_03\Uninst.isu" -a
144-
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles%\jre*" directories...
144+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_02\Uninst.isu" -a
145-
FOR /D /R "%ProgramFiles%\Java\" %%X IN (j2re*) DO RMDIR /S /Q "%%X">> %LOGPATH%\%LOGFILE%
145+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_01\Uninst.isu" -a
146-
FOR /D /R "%ProgramFiles%\Java" %%X IN (jre*) DO RMDIR /S /Q "%%X">> %LOGPATH%\%LOGFILE%
146+
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3\Uninst.isu" -a
147-
echo %CUR_DATE% %TIME%   Done.>> %LOGPATH%\%LOGFILE%
147+
148
149
:: Run wildcard uninstallers
150-
:: Miscellaneous stuff
150+
echo %CUR_DATE% %TIME%   Now running WMIC wildcard catchall uninstallation...>> "%LOGPATH%\%LOGFILE%"
151-
echo %CUR_DATE% %TIME%   Searching for and purging other Java Runtime-related directories...>> %LOGPATH%\%LOGFILE%
151+
echo %CUR_DATE% %TIME%   Now running WMIC wildcard catchall uninstallation...
152
wmic product where "name like '%%J2SE Runtime%%'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
153-
echo.>> %LOGPATH%\%LOGFILE%
153+
wmic product where "name like 'Java%%Runtime%%'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
154-
del /F /Q %SystemDrive%\1033.mst>> %LOGPATH%\%LOGFILE%
154+
wmic product where "name like 'JavaFX%%'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
155-
del /F /S /Q "%SystemDrive%\J2SE Runtime Environment*">> %LOGPATH%\%LOGFILE%
155+
156-
echo.>> %LOGPATH%\%LOGFILE%
156+
echo %CUR_DATE% %TIME%   Done.>> "%LOGPATH%\%LOGFILE%"
157
echo %CUR_DATE% %TIME%   Done.
158
159-
echo %CUR_DATE% %TIME%   File and directory cleanup done.>> %LOGPATH%\%LOGFILE%
159+
160
::::::::::::::::::::::
161-
echo %CUR_DATE% %TIME%   All versions of the Java Runtime have been removed. Recommend rebooting and washing your hands.>> %LOGPATH%\%LOGFILE%
161+
:: REGISTRY CLEANUP :: -- This is where it gets hairy. Don't read ahead if you have a weak constitution.
162-
echo %CUR_DATE% %TIME%   All versions of the Java Runtime have been removed. Recommend rebooting and washing your hands.
162+
163-
echo %CUR_DATE% %TIME%   Registry hive backups here: %TEMP%\java_purge_registry_backup\>> %LOGPATH%\%LOGFILE%
163+
echo %CUR_DATE% %TIME%   Commencing registry cleanup...>> "%LOGPATH%\%LOGFILE%"
164-
echo %CUR_DATE% %TIME%   Registry hive backups here: %TEMP%\java_purge_registry_backup\
164+
165-
echo %CUR_DATE% %TIME%   Log file here: %LOGPATH%\%LOGFILE%>> %LOGPATH%\%LOGFILE%
165+
echo %CUR_DATE% %TIME%   Searching for residual registry keys...>> "%LOGPATH%\%LOGFILE%"
166-
echo %CUR_DATE% %TIME%   Log file here: %LOGPATH%\%LOGFILE%
166+
echo %CUR_DATE% %TIME%   Searching for residual registry keys...
167
168-
REM Return exit code to SCCM/PDQ Deploy/etc
168+
:: Search MSIExec installer class hive for keys
169
echo %CUR_DATE% %TIME%   Looking in HKLM\software\classes\installer\products...>> "%LOGPATH%\%LOGFILE%"
170
echo %CUR_DATE% %TIME%   Looking in HKLM\software\classes\installer\products...
171
reg query HKLM\software\classes\installer\products /f "J2SE Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
172
reg query HKLM\software\classes\installer\products /f "Java(TM) 6 Update" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
173
reg query HKLM\software\classes\installer\products /f "Java 7" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
174
reg query HKLM\software\classes\installer\products /f "Java*Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
175
176
:: Search the Add/Remove programs list (this helps with broken Java installations)
177
echo %CUR_DATE% %TIME%   Looking in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall...>> "%LOGPATH%\%LOGFILE%"
178
echo %CUR_DATE% %TIME%   Looking in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall...
179
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "J2SE Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
180
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "Java(TM) 6 Update" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
181
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "Java 7" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
182
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "Java*Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
183
184
:: Search the Add/Remove programs list, x86/Wow64 node (this helps with broken Java installations)
185
echo %CUR_DATE% %TIME%   Looking in HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall...>> "%LOGPATH%\%LOGFILE%"
186
echo %CUR_DATE% %TIME%   Looking in HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall...
187
reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /f "J2SE Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
188
reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /f "Java(TM) 6 Update" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
189
reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /f "Java 7" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
190
reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /f "Java*Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
191
192
193
:: List the leftover registry keys
194
echo %CUR_DATE% %TIME%   Found these keys...>> "%LOGPATH%\%LOGFILE%"
195
echo %CUR_DATE% %TIME%   Found these keys...
196
echo.>> "%LOGPATH%\%LOGFILE%"
197
echo.
198
type %TEMP%\java_purge_registry_keys.txt>> "%LOGPATH%\%LOGFILE%"
199
type %TEMP%\java_purge_registry_keys.txt
200
echo.>> "%LOGPATH%\%LOGFILE%"
201
echo.
202
203
:: Backup the various registry keys that will get deleted (if they exist)
204
:: We do this mainly because we're using wildcards, so we want a method to roll back if we accidentally nuke the wrong thing
205
echo %CUR_DATE% %TIME%   Backing up keys...>> "%LOGPATH%\%LOGFILE%"
206
echo %CUR_DATE% %TIME%   Backing up keys...
207
if exist "%TEMP%\java_purge_registry_backup" rmdir /s /q "%TEMP%\java_purge_registry_backup" >NUL
208
mkdir %TEMP%\java_purge_registry_backup >NUL
209
:: This line walks through the file we generated and dumps each key to a file
210
for /f "tokens=* delims= " %%a in (%TEMP%\java_purge_registry_keys.txt) do (reg query %%a) >> %TEMP%\java_purge_registry_backup\java_reg_keys_1.bak
211
212
echo.
213
echo %CUR_DATE% %TIME%   Keys backed up to %TEMP%\java_purge_registry_backup\ >> "%LOGPATH%\%LOGFILE%"
214
echo %CUR_DATE% %TIME%   Keys backed up to %TEMP%\java_purge_registry_backup\
215
echo %CUR_DATE% %TIME%   This directory will be deleted at next reboot, so get it now if you need it! >> "%LOGPATH%\%LOGFILE%"
216
echo %CUR_DATE% %TIME%   This directory will be deleted at next reboot, so get it now if you need it!
217
218
:: Purge the keys
219
echo %CUR_DATE% %TIME%   Purging keys...>> "%LOGPATH%\%LOGFILE%"
220
echo %CUR_DATE% %TIME%   Purging keys...
221
echo.
222
:: This line walks through the file we generated and deletes each key listed
223
for /f "tokens=* delims= " %%a in (%TEMP%\java_purge_registry_keys.txt) do reg delete %%a /va /f>> "%LOGPATH%\%LOGFILE%"
224
225
:: These lines delete some specific Java locations
226
:: ! These keys AREN'T backed up (as opposed to the ones above) because here we are specifically targeting known Java keys, whereas
227
::   above we were nuking registry keys based on wildcard searches, so those need backups in case we nuke something we didn't want to.
228
229
:: Delete keys for 32-bit Java installations on a 64-bit copy of Windows
230
reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Auto Update" /va /f>> "%LOGPATH%\%LOGFILE%"
231
reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Plug-in" /va /f>> "%LOGPATH%\%LOGFILE%"
232
reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /va /f>> "%LOGPATH%\%LOGFILE%"
233
reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Update" /va /f>> "%LOGPATH%\%LOGFILE%"
234
reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Web Start" /va /f>> "%LOGPATH%\%LOGFILE%"
235
reg delete "HKLM\SOFTWARE\Wow6432Node\JreMetrics" /va /f>> "%LOGPATH%\%LOGFILE%"
236
237
:: Delete keys for for 32-bit and 64-bit Java installations on matching Windows architecture
238
reg delete "HKLM\SOFTWARE\JavaSoft\Auto Update" /va /f>> "%LOGPATH%\%LOGFILE%"
239
reg delete "HKLM\SOFTWARE\JavaSoft\Java Plug-in" /va /f>> "%LOGPATH%\%LOGFILE%"
240
reg delete "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /va /f>> "%LOGPATH%\%LOGFILE%"
241
reg delete "HKLM\SOFTWARE\JavaSoft\Java Update" /va /f>> "%LOGPATH%\%LOGFILE%"
242
reg delete "HKLM\SOFTWARE\JavaSoft\Java Web Start" /va /f>> "%LOGPATH%\%LOGFILE%"
243
reg delete "HKLM\SOFTWARE\JreMetrics" /va /f>> "%LOGPATH%\%LOGFILE%"
244
245
246
echo.
247
echo %CUR_DATE% %TIME%   Keys purged.>> "%LOGPATH%\%LOGFILE%"
248
echo %CUR_DATE% %TIME%   Keys purged.
249
echo %CUR_DATE% %TIME%   Registry cleanup done.>> "%LOGPATH%\%LOGFILE%"
250
echo %CUR_DATE% %TIME%   Registry cleanup done.
251
echo.
252
253
::::::::::::::::::::::::::::::::
254
:: FILE AND DIRECTORY CLEANUP ::
255
::::::::::::::::::::::::::::::::
256
echo %CUR_DATE% %TIME%   Commencing file and directory cleanup...>> "%LOGPATH%\%LOGFILE%"
257
echo %CUR_DATE% %TIME%   Commencing file and directory cleanup...
258
259
:: Kill accursed Java tasks in Task Scheduler
260
echo %CUR_DATE% %TIME%   Removing Java tasks from the Windows Task Scheduler...>> "%LOGPATH%\%LOGFILE%"
261
echo %CUR_DATE% %TIME%   Removing Java tasks from the Windows Task Scheduler...
262
echo.
263
del /F /Q %WINDIR%\tasks\Java*.job>> "%LOGPATH%\%LOGFILE%"
264
del /F /Q %WINDIR%\System32\tasks\Java*.job>> "%LOGPATH%\%LOGFILE%"
265
del /F /Q %WINDIR%\SysWOW64\tasks\Java*.job>> "%LOGPATH%\%LOGFILE%"
266
echo.
267
268
:: Kill the accursed Java Quickstarter and Updater
269
echo %CUR_DATE% %TIME%   De-registering and removing Java Quickstarter and Updater...>> "%LOGPATH%\%LOGFILE%"
270
echo %CUR_DATE% %TIME%   De-registering and removing Java Quickstarter and Updater...
271
net stop JavaQuickStarterService>> "%LOGPATH%\%LOGFILE%"
272
sc delete JavaQuickStarterService>> "%LOGPATH%\%LOGFILE%"
273
net stop jusched>> "%LOGPATH%\%LOGFILE%"
274
sc delete jusched>> "%LOGPATH%\%LOGFILE%"
275
"%ProgramFiles(x86)%\Java\jre6\bin\jqs.exe" -disable>> "%LOGPATH%\%LOGFILE%"
276
"%ProgramFiles(x86)%\Java\jre7\bin\jqs.exe" -disable>> "%LOGPATH%\%LOGFILE%"
277
"%ProgramFiles%\Java\jre6\bin\jqs.exe" -disable>> "%LOGPATH%\%LOGFILE%"
278
"%ProgramFiles%\Java\jre7\bin\jqs.exe" -disable>> "%LOGPATH%\%LOGFILE%"
279
"%ProgramFiles(x86)%\Java\jre6\bin\jqs.exe" -unregister>> "%LOGPATH%\%LOGFILE%"
280
"%ProgramFiles(x86)%\Java\jre7\bin\jqs.exe" -unregister>> "%LOGPATH%\%LOGFILE%"
281
"%ProgramFiles%\Java\jre6\bin\jqs.exe" -unregister>> "%LOGPATH%\%LOGFILE%"
282
"%ProgramFiles%\Java\jre7\bin\jqs.exe" -unregister>> "%LOGPATH%\%LOGFILE%"
283
msiexec.exe /x {4A03706F-666A-4037-7777-5F2748764D10} /qn /norestart
284
echo.
285
286
:: Nuke 32-bit Java installation directories
287
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles(x86)%\Java\jre*" directories...>> "%LOGPATH%\%LOGFILE%"
288
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles(x86)%\Java\jre*" directories...
289
FOR /D /R "%ProgramFiles(x86)%\Java\" %%X IN (j2re*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
290
FOR /D /R "%ProgramFiles(x86)%\Java\" %%X IN (jre*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
291
rmdir /S /Q "%ProgramFiles(x86)%\JavaSoft\JRE">> "%LOGPATH%\%LOGFILE%"
292
293
:: Nuke 64-bit Java installation directories
294
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles%\Java\jre*" directories...>> "%LOGPATH%\%LOGFILE%"
295
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles%\Java\jre*" directories...
296
FOR /D /R "%ProgramFiles%\Java\" %%X IN (j2re*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
297
FOR /D /R "%ProgramFiles%\Java\" %%X IN (jre*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
298
rmdir /S /Q "%ProgramFiles%\JavaSoft\JRE">> "%LOGPATH%\%LOGFILE%"
299
300
:: Miscellaneous stuff, sometimes left over by the installers
301
echo %CUR_DATE% %TIME%   Searching for and purging other Java Runtime-related directories...>> "%LOGPATH%\%LOGFILE%"
302
echo %CUR_DATE% %TIME%   Searching for and purging other Java Runtime-related directories...
303
echo.
304
del /F /Q %SystemDrive%\1033.mst>> "%LOGPATH%\%LOGFILE%"
305
del /F /S /Q "%SystemDrive%\J2SE Runtime Environment*">> "%LOGPATH%\%LOGFILE%"
306
echo.
307
308
:: Done.
309
echo %CUR_DATE% %TIME%   File and directory cleanup done.>> "%LOGPATH%\%LOGFILE%"
310
echo %CUR_DATE% %TIME%   File and directory cleanup done.
311
echo. >> "%LOGPATH%\%LOGFILE%"
312
echo.
313
echo %CUR_DATE% %TIME%   JAVA NUKER COMPLETE. Recommend rebooting and washing your hands.>> "%LOGPATH%\%LOGFILE%"
314
echo %CUR_DATE% %TIME%   JAVA NUKER COMPLETE. Recommend rebooting and washing your hands.
315
echo %CUR_DATE% %TIME%     Registry hive backups: %TEMP%\java_purge_registry_backup\>> "%LOGPATH%\%LOGFILE%"
316
echo %CUR_DATE% %TIME%     Registry hive backups: %TEMP%\java_purge_registry_backup\
317
echo %CUR_DATE% %TIME%     Log file: "%LOGPATH%\%LOGFILE%">> "%LOGPATH%\%LOGFILE%"
318
echo %CUR_DATE% %TIME%     Log file: "%LOGPATH%\%LOGFILE%"
319
320
:: Return exit code to SCCM/PDQ Deploy/Psexec/etc
321
pause
322
exit /B %EXIT_CODE%