View difference between Paste ID: EaFke4vh and Uvq8wPQV
SHOW: | | - or go back to the newest paste.
1
:: Purpose:       1. Nuke ALL versions of the Java Runtime, series 3 through 7, x86 and x64, and JavaFX
2
::                2. Leaves Java Development Kit installations intact
3
::                3. Reinstalls the latest JRE (if you want it to)
4
::                4. Puts the lotion on its skin.
5
:: Requirements:  local administrative rights
6
:: Author:        vocatus on reddit.com/r/sysadmin and /r/usefulscripts
7
::                additional thanks to: 
8
::                 - reddit.com/user/MrYiff          : testing which solved bug with OS_VERSION variable
9
::                 - reddit.com/user/cannibalkitteh  : additional registry & file cleaning locations
10
::                 - reddit.com/user/sdjason         : optional JRE reinstall functionality 
11-
:: History:       1.4 + FEATURE:      Added check to see if we're on Windows XP, to run different code for certain sections
11+
12-
::                    + FEATURE:      Added comprehensive WMI repair if it's broken
12+
:: History:       1.4.1 / FIX:          Re-enabled "echo off" statement at beginning of script
13-
::                    + FEATURE:      Added XP versions of a lot of the code
13+
::                      / FIX:          Fixed empty OS_VERSION variable on Vista/7/2008/8/2012 (MrYiff)
14-
::                1.3 + FEATURE:      Added variables to reinstall Java after cleanup (off by default) (sdjason)
14+
::                1.4   + FEATURE:      Added check to see if we're on Windows XP, to run different code for certain sections
15-
::                    + FILE CLEANUP: Added C:\Users*\AppData\LocalLow\Sun\Java\jre* (cannibalkitteh)
15+
::                      + FEATURE:      Added comprehensive WMI repair if it's broken
16-
::                    + FILE CLEANUP: Added C:\Users*\AppData\LocalLow\Sun\Java\AU   (cannibalkitteh)
16+
::                      + FEATURE:      Added XP versions of a lot of the code
17-
::                1.2 + COMMENTS:     Improved a lot of commenting
17+
::                1.3   + FEATURE:      Added variables to reinstall Java after cleanup (off by default) (sdjason)
18-
::                    + UNINSTALLER:  Added WMIC wildcard-matching to catch all JRE GUIDs, including future revisions
18+
::                      + FILE CLEANUP: Added C:\Users*\AppData\LocalLow\Sun\Java\jre* (cannibalkitteh)
19-
::                    + FILE CLEANUP: Major overhaul,                                (mattm)
19+
::                      + FILE CLEANUP: Added C:\Users*\AppData\LocalLow\Sun\Java\AU   (cannibalkitteh)
20-
::                    + REGISTRY:     Added additional locations:                    (cannibalkitteh)
20+
::                1.2   + COMMENTS:     Improved a lot of commenting
21-
::                      - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
21+
::                      + UNINSTALLER:  Added WMIC wildcard-matching to catch all JRE GUIDs, including future revisions
22-
::                      - HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
22+
::                      + FILE CLEANUP: Major overhaul,                                (mattm)
23-
::                    + PREP:         Added Chrome to the list of browsers to kill before starting
23+
::                      + REGISTRY:     Added additional locations:                    (cannibalkitteh)
24-
::                    + PREP:         Added /T flag (terminate child processes) to all browser and Java kill lines
24+
::                        - HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
25-
::                    * LOGGING:      Minor improvements
25+
::                        - HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
26-
::                1.1 + Massive overhaul of functionality and logging
26+
::                      + PREP:         Added Chrome to the list of browsers to kill before starting
27-
::                1.0   Initial write
27+
::                      + PREP:         Added /T flag (terminate child processes) to all browser and Java kill lines
28
::                      * LOGGING:      Minor improvements
29
::                1.1   + Massive overhaul of functionality and logging
30-
::@echo off
30+
::                1.0     Initial write
31-
set VERSION=1.4
31+
32-
set UPDATED=2013-07-16
32+
33
@echo off
34
set VERSION=1.4.1
35
set UPDATED=2013-07-18
36
37
:::::::::::::::
38
:: VARIABLES :: -- set these if you'd like
39
:::::::::::::::
40
:: Rules for variables:
41
::  * NO quotes!                       (bad:  "c:\directory\path"       )
42
::  * NO trailing slashes on the path! (bad:   c:\directory\            )
43
::  * Spaces are okay                  (okay:  c:\my folder\with spaces )
44
::  * Network paths are okay           (okay:  \\server\share name      )
45
::                                     (       \\172.16.1.5\share name  )
46
47
:: Log settings
48
set LOGPATH=%SystemDrive%\Logs
49
set LOGFILE=%COMPUTERNAME%_java_runtime_removal.log
50
51
:: Java re-install. Change to 'yes' if you want to reinstall Java after cleanup is done.
52
:: If you do, make sure to set the location, file name and arguments below!
53
set REINSTALL_JAVA=no
54
55
:: The JRE installer must be in a place the script can find it (e.g. the same directory as the script)
56
set JAVA_LOCATION=%~dp0
57
set JAVA_BINARY=jre-7u25-windows-x64.exe
58
set JAVA_ARGUMENTS=/s /v"ADDLOCAL=ALL IEXPLORER=1 MOZILLA=1 JAVAUPDATE=0 REBOOT=suppress" /qn
59
60
:: =================================================================================== ::
61
::   Think of everything below this line like a feral badger: Look, but Do Not Touch   ::
62
:: =================================================================================== ::
63
64
:: Check if we're on XP, if so, set the flag. This affects some commands later,
65
:: because XP uses slightly different binaries for reg.exe and various other Windows utilities
66
ver | find "XP"
67
IF %ERRORLEVEL%==0 set OS_VERSION=XP
68
IF NOT %ERRORLEVEL%==0 set OS_VERSION=OTHER
69
70
:: Force WMIC location
71
set WMIC=%WINDIR%\system32\wbem\wmic.exe
72
73
:: Create the log directory if it doesn't exist
74
if not exist %LOGPATH% mkdir %LOGPATH%
75
if exist "%LOGPATH%\%LOGFILE%" del "%LOGPATH%\%LOGFILE%"
76
77
:: Get the date into a format we can use (ISO standard date format)
78
set CUR_DATE=%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%
79
80
:::::::::::::::::::::
81
:: PREP AND CHECKS ::
82
:::::::::::::::::::::
83
echo.
84
echo  JAVA RUNTIME NUKER
85
echo  v%VERSION%, updated %UPDATED%
86
echo.
87
echo %CUR_DATE% %TIME%   Beginning removal of Java Runtime Environments (series 3-7, x86 and x64) and JavaFX...>> "%LOGPATH%\%LOGFILE%"
88
echo %CUR_DATE% %TIME%   Beginning removal of Java Runtime Environments (series 3-7, x86 and x64) and JavaFX...
89
90
:: Do a quick check to make sure WMI is working, and if not, run a repair on it
91
wmic timezone
92
if not %ERRORLEVEL%==0 (
93
    echo %CUR_DATE% %TIME% ! WMI appears to be broken. Running WMI repair. This might take a minute, be patient...>> "%LOGPATH%\%LOGFILE%"
94
    echo %CUR_DATE% %TIME% ! WMI appears to be broken. Running WMI repair. This might take a minute, be patient...
95
    net stop winmgmt
96
    pushd %WINDIR%\system32\wbem
97
    for %%i in (*.dll) do RegSvr32 -s %%i
98
    :: Kill this random window that pops up
99
    tskill wbemtest /a 2>NUL
100
    scrcons.exe /RegServer
101
    unsecapp.exe /RegServer
102
    start "" wbemtest.exe /RegServer
103
    tskill wbemtest /a 2>NUL
104
    tskill wbemtest /a 2>NUL
105
    winmgmt.exe /RegServer
106
    wmiadap.exe /RegServer
107
    wmiapsrv.exe /RegServer
108
    wmiprvse.exe /RegServer
109
    net start winmgmt
110
    popd
111
    )
112
	
113
:: Kill all browsers and running Java instances first
114
echo %CUR_DATE% %TIME%   Killing all running browsers and Java instances...>> "%LOGPATH%\%LOGFILE%"
115
echo %CUR_DATE% %TIME%   Killing all running browsers and Java instances...
116
if %OS_VERSION%==XP (
117
    :: XP version of the task killer
118
    echo.
119
    tskill /a /v java >> "%LOGPATH%\%LOGFILE%"
120
    tskill /a /v javaw >> "%LOGPATH%\%LOGFILE%"
121
    tskill /a /v javaws >> "%LOGPATH%\%LOGFILE%"
122
    tskill /a /v jqs >> "%LOGPATH%\%LOGFILE%"
123
    tskill /a /v jusched >> "%LOGPATH%\%LOGFILE%"
124
    tskill /a /v iexplore >> "%LOGPATH%\%LOGFILE%"
125
    tskill /a /v iexplorer >> "%LOGPATH%\%LOGFILE%"
126
    tskill /a /v firefox >> "%LOGPATH%\%LOGFILE%"
127
    tskill /a /v chrome >> "%LOGPATH%\%LOGFILE%"
128
    echo.
129
) ELSE (
130
    :: All other Windows versions
131
    echo.
132
    taskkill /f /im java.exe /T >> "%LOGPATH%\%LOGFILE%"
133
    taskkill /f /im javaw.exe /T >> "%LOGPATH%\%LOGFILE%"
134
    taskkill /f /im javaws.exe /T >> "%LOGPATH%\%LOGFILE%"
135
    taskkill /f /im jqs.exe /T >> "%LOGPATH%\%LOGFILE%"
136
    taskkill /f /im jusched.exe /T >> "%LOGPATH%\%LOGFILE%"
137
    taskkill /f /im iexplore.exe /T >> "%LOGPATH%\%LOGFILE%"
138
    taskkill /f /im iexplorer.exe /T >> "%LOGPATH%\%LOGFILE%"
139
    taskkill /f /im firefox.exe /T >> "%LOGPATH%\%LOGFILE%"
140
    taskkill /f /im chrome.exe /T >> "%LOGPATH%\%LOGFILE%"
141
    echo.
142
    )
143
144
145
	:::::::::::::::::::::::::
146
:: UNINSTALLER SECTION :: -- Basically here we just brute-force every "normal" method for
147
:::::::::::::::::::::::::    removing Java, before resorting to more painstaking methods later
148
echo %CUR_DATE% %TIME%   Targeting individual JRE versions...>> "%LOGPATH%\%LOGFILE%"
149
echo %CUR_DATE% %TIME%   Targeting individual JRE versions...
150
echo %CUR_DATE% %TIME%   This might take a few minutes. Don't close this window.
151
152
:: Okay, so all JRE runtimes (series 4-7) use product GUIDs, with certain numbers that increment with each new update (e.g. Update 25)
153
:: This makes it easy to catch ALL of them through liberal use of WMIC wildcards ("_" is single character, "%" is any number of characters)
154
:: Additionally, JRE 6 introduced 64-bit runtimes, so in addition to the two-digit Update revision number (e.g. update 34), we also now 
155
:: check for the architecture type, which always equals '32' or '64'. First wildcard is the architecture, second is the revision/update number.
156
157
:: JRE 7
158
echo %CUR_DATE% %TIME%   JRE 7...>> "%LOGPATH%\%LOGFILE%"
159
echo %CUR_DATE% %TIME%   JRE 7...
160
%WMIC% product where "IdentifyingNumber like '{26A24AE4-039D-4CA4-87B4-2F8__170__FF}'" call uninstall /nointeractive >> "%LOGPATH%\%LOGFILE%"
161
162
:: JRE 6
163
echo %CUR_DATE% %TIME%   JRE 6...>> "%LOGPATH%\%LOGFILE%"
164
echo %CUR_DATE% %TIME%   JRE 6...
165
:: 1st line is for updates 23-xx, after 64-bit runtimes were introduced.
166
:: 2nd line is for updates 1-22, before Oracle released 64-bit JRE 6 runtimes
167
%WMIC% product where "IdentifyingNumber like '{26A24AE4-039D-4CA4-87B4-2F8__160__FF}'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
168
%WMIC% product where "IdentifyingNumber like '{3248F0A8-6813-11D6-A77B-00B0D0160__0}'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
169
170
:: JRE 5
171
echo %CUR_DATE% %TIME%   JRE 5...>> "%LOGPATH%\%LOGFILE%"
172
echo %CUR_DATE% %TIME%   JRE 5...
173
%WMIC% product where "IdentifyingNumber like '{3248F0A8-6813-11D6-A77B-00B0D0150__0}'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
174
175
:: JRE 4
176
echo %CUR_DATE% %TIME%   JRE 4...>> "%LOGPATH%\%LOGFILE%"
177
echo %CUR_DATE% %TIME%   JRE 4...
178
%WMIC% product where "IdentifyingNumber like '{7148F0A8-6813-11D6-A77B-00B0D0142__0}'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
179
180
:: JRE 3
181
echo %CUR_DATE% %TIME%   JRE 3 (AKA Java 2 Runtime v1.3.xx)...>> "%LOGPATH%\%LOGFILE%"
182
echo %CUR_DATE% %TIME%   JRE 3 (AKA Java 2 Runtime v1.3.xx)...
183
:: This version is so old we have to resort to a different method of removing it
184
:: Java 2 Runtime Environment Standard Edition v1.3.1_25-00
185
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_25\Uninst.isu" -a 2>NUL
186
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_24\Uninst.isu" -a 2>NUL
187
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_23\Uninst.isu" -a 2>NUL
188
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_22\Uninst.isu" -a 2>NUL
189
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_21\Uninst.isu" -a 2>NUL
190
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_20\Uninst.isu" -a 2>NUL
191
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_19\Uninst.isu" -a 2>NUL
192
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_18\Uninst.isu" -a 2>NUL
193
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_17\Uninst.isu" -a 2>NUL
194
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_16\Uninst.isu" -a 2>NUL
195
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_15\Uninst.isu" -a 2>NUL
196
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_14\Uninst.isu" -a 2>NUL
197
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_13\Uninst.isu" -a 2>NUL
198
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_12\Uninst.isu" -a 2>NUL
199
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_11\Uninst.isu" -a 2>NUL
200
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_10\Uninst.isu" -a 2>NUL
201
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_09\Uninst.isu" -a 2>NUL
202
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_08\Uninst.isu" -a 2>NUL
203
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_07\Uninst.isu" -a 2>NUL
204
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_06\Uninst.isu" -a 2>NUL
205
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_05\Uninst.isu" -a 2>NUL
206
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_04\Uninst.isu" -a 2>NUL
207
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_03\Uninst.isu" -a 2>NUL
208
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_02\Uninst.isu" -a 2>NUL
209
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3.1_01\Uninst.isu" -a 2>NUL
210
%SystemRoot%\IsUninst.exe -f"%SystemDrive%\Program Files\JavaSoft\JRE\1.3\Uninst.isu" -a 2>NUL
211
212
:: Run wildcard uninstallers
213
echo %CUR_DATE% %TIME%   Now running WMIC wildcard catchall uninstallation...>> "%LOGPATH%\%LOGFILE%"
214
echo %CUR_DATE% %TIME%   Now running WMIC wildcard catchall uninstallation...
215
%WMIC% product where "name like '%%J2SE Runtime%%'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
216
%WMIC% product where "name like 'Java%%Runtime%%'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
217
%WMIC% product where "name like 'JavaFX%%'" call uninstall /nointeractive>> "%LOGPATH%\%LOGFILE%"
218
echo %CUR_DATE% %TIME%   Done.>> "%LOGPATH%\%LOGFILE%"
219
echo %CUR_DATE% %TIME%   Done.
220
221
222
::::::::::::::::::::::
223
:: REGISTRY CLEANUP :: -- This is where it gets hairy. Don't read ahead if you have a weak constitution.
224
::::::::::::::::::::::
225
if %OS_VERSION%==XP(
226
    echo %CUR_DATE% %TIME%   Registry cleanup doesn't work on Windows XP, skipping...>> "%LOGPATH%\%LOGFILE%"
227
    echo %CUR_DATE% %TIME%   Registry cleanup doesn't work on Windows XP, skipping...
228
) else (
229
    :: All other versions of Windows
230
    echo %CUR_DATE% %TIME%   Commencing registry cleanup...>> "%LOGPATH%\%LOGFILE%"
231
    echo %CUR_DATE% %TIME%   Commencing registry cleanup...
232
    echo %CUR_DATE% %TIME%   Searching for residual registry keys...>> "%LOGPATH%\%LOGFILE%"
233
    echo %CUR_DATE% %TIME%   Searching for residual registry keys...
234
235
    :: Search MSIExec installer class hive for keys
236
    echo %CUR_DATE% %TIME%   Looking in HKLM\software\classes\installer\products...>> "%LOGPATH%\%LOGFILE%"
237
    echo %CUR_DATE% %TIME%   Looking in HKLM\software\classes\installer\products...
238
    reg query HKLM\software\classes\installer\products /f "J2SE Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
239
    reg query HKLM\software\classes\installer\products /f "Java(TM) 6 Update" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
240
    reg query HKLM\software\classes\installer\products /f "Java 7" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
241
    reg query HKLM\software\classes\installer\products /f "Java*Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
242
243
    :: Search the Add/Remove programs list (this helps with broken Java installations)
244
    echo %CUR_DATE% %TIME%   Looking in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall...>> "%LOGPATH%\%LOGFILE%"
245
    echo %CUR_DATE% %TIME%   Looking in HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall...
246
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "J2SE Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
247
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "Java(TM) 6 Update" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
248
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "Java 7" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
249
    reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "Java*Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
250
251
    :: Search the Add/Remove programs list, x86/Wow64 node (this helps with broken Java installations)
252
    echo %CUR_DATE% %TIME%   Looking in HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall...>> "%LOGPATH%\%LOGFILE%"
253
    echo %CUR_DATE% %TIME%   Looking in HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall...
254
    reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /f "J2SE Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
255
    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
256
    reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /f "Java 7" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
257
    reg query HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall /f "Java*Runtime" /s | find "HKEY_LOCAL_MACHINE" >> %TEMP%\java_purge_registry_keys.txt
258
259
260
    :: List the leftover registry keys
261
    echo %CUR_DATE% %TIME%   Found these keys...>> "%LOGPATH%\%LOGFILE%"
262
    echo %CUR_DATE% %TIME%   Found these keys...
263
    echo.>> "%LOGPATH%\%LOGFILE%"
264
    echo.
265
    type %TEMP%\java_purge_registry_keys.txt>> "%LOGPATH%\%LOGFILE%"
266
    type %TEMP%\java_purge_registry_keys.txt
267
    echo.>> "%LOGPATH%\%LOGFILE%"
268
    echo.
269
270
    :: Backup the various registry keys that will get deleted (if they exist)
271
    :: We do this mainly because we're using wildcards, so we want a method to roll back if we accidentally nuke the wrong thing
272
    echo %CUR_DATE% %TIME%   Backing up keys...>> "%LOGPATH%\%LOGFILE%"
273
    echo %CUR_DATE% %TIME%   Backing up keys...
274
    if exist "%TEMP%\java_purge_registry_backup" rmdir /s /q "%TEMP%\java_purge_registry_backup" >NUL
275
    mkdir %TEMP%\java_purge_registry_backup >NUL
276
    :: This line walks through the file we generated and dumps each key to a file
277
    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
278
279
    echo.
280
    echo %CUR_DATE% %TIME%   Keys backed up to %TEMP%\java_purge_registry_backup\ >> "%LOGPATH%\%LOGFILE%"
281
    echo %CUR_DATE% %TIME%   Keys backed up to %TEMP%\java_purge_registry_backup\
282
    echo %CUR_DATE% %TIME%   This directory will be deleted at next reboot, so get it now if you need it! >> "%LOGPATH%\%LOGFILE%"
283
    echo %CUR_DATE% %TIME%   This directory will be deleted at next reboot, so get it now if you need it!
284
285
    :: Purge the keys
286
    echo %CUR_DATE% %TIME%   Purging keys...>> "%LOGPATH%\%LOGFILE%"
287
    echo %CUR_DATE% %TIME%   Purging keys...
288
    echo.
289
    :: This line walks through the file we generated and deletes each key listed
290
    for /f "tokens=* delims= " %%a in (%TEMP%\java_purge_registry_keys.txt) do reg delete %%a /va /f>> "%LOGPATH%\%LOGFILE%"
291
292
    :: These lines delete some specific Java locations
293
    :: These keys AREN'T backed up because here we are specifically targeting known Java keys, whereas
294
    :: above we were nuking keys based on wildcards, so those need backups in case we nuke something we didn't want to.
295
296
    :: Delete keys for 32-bit Java installations on a 64-bit copy of Windows
297
    reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Auto Update" /va /f>> "%LOGPATH%\%LOGFILE%"
298
    reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Plug-in" /va /f>> "%LOGPATH%\%LOGFILE%"
299
    reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" /va /f>> "%LOGPATH%\%LOGFILE%"
300
    reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Update" /va /f>> "%LOGPATH%\%LOGFILE%"
301
    reg delete "HKLM\SOFTWARE\Wow6432Node\JavaSoft\Java Web Start" /va /f>> "%LOGPATH%\%LOGFILE%"
302
    reg delete "HKLM\SOFTWARE\Wow6432Node\JreMetrics" /va /f>> "%LOGPATH%\%LOGFILE%"
303
304
    :: Delete keys for for 32-bit and 64-bit Java installations on matching Windows architecture
305
    reg delete "HKLM\SOFTWARE\JavaSoft\Auto Update" /va /f>> "%LOGPATH%\%LOGFILE%"
306
    reg delete "HKLM\SOFTWARE\JavaSoft\Java Plug-in" /va /f>> "%LOGPATH%\%LOGFILE%"
307
    reg delete "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /va /f>> "%LOGPATH%\%LOGFILE%"
308
    reg delete "HKLM\SOFTWARE\JavaSoft\Java Update" /va /f>> "%LOGPATH%\%LOGFILE%"
309
    reg delete "HKLM\SOFTWARE\JavaSoft\Java Web Start" /va /f>> "%LOGPATH%\%LOGFILE%"
310
    reg delete "HKLM\SOFTWARE\JreMetrics" /va /f>> "%LOGPATH%\%LOGFILE%"
311
312
    echo.
313
    echo %CUR_DATE% %TIME%   Keys purged.>> "%LOGPATH%\%LOGFILE%"
314
    echo %CUR_DATE% %TIME%   Keys purged.
315
    echo %CUR_DATE% %TIME%   Registry cleanup done.>> "%LOGPATH%\%LOGFILE%"
316
    echo %CUR_DATE% %TIME%   Registry cleanup done.
317
    echo.
318
    )
319
320
::::::::::::::::::::::::::::::::
321
:: FILE AND DIRECTORY CLEANUP ::
322
::::::::::::::::::::::::::::::::
323
echo %CUR_DATE% %TIME%   Commencing file and directory cleanup...>> "%LOGPATH%\%LOGFILE%"
324
echo %CUR_DATE% %TIME%   Commencing file and directory cleanup...
325
326
:: Kill accursed Java tasks in Task Scheduler
327
echo %CUR_DATE% %TIME%   Removing Java tasks from the Windows Task Scheduler...>> "%LOGPATH%\%LOGFILE%"
328
echo %CUR_DATE% %TIME%   Removing Java tasks from the Windows Task Scheduler...
329
echo.
330
del /F /Q %WINDIR%\tasks\Java*.job>> "%LOGPATH%\%LOGFILE%"
331
del /F /Q %WINDIR%\System32\tasks\Java*.job>> "%LOGPATH%\%LOGFILE%"
332
del /F /Q %WINDIR%\SysWOW64\tasks\Java*.job>> "%LOGPATH%\%LOGFILE%"
333
echo.
334
335
:: Kill the accursed Java Quickstarter and Updater
336
echo %CUR_DATE% %TIME%   De-registering and removing Java Quickstarter and Updater...>> "%LOGPATH%\%LOGFILE%"
337
echo %CUR_DATE% %TIME%   De-registering and removing Java Quickstarter and Updater...
338
net stop JavaQuickStarterService>> "%LOGPATH%\%LOGFILE%"
339
sc delete JavaQuickStarterService>> "%LOGPATH%\%LOGFILE%"
340
net stop jusched>> "%LOGPATH%\%LOGFILE%"
341
sc delete jusched>> "%LOGPATH%\%LOGFILE%"
342
"%ProgramFiles(x86)%\Java\jre6\bin\jqs.exe" -disable>> "%LOGPATH%\%LOGFILE%"
343
"%ProgramFiles(x86)%\Java\jre7\bin\jqs.exe" -disable>> "%LOGPATH%\%LOGFILE%"
344
"%ProgramFiles%\Java\jre6\bin\jqs.exe" -disable>> "%LOGPATH%\%LOGFILE%"
345
"%ProgramFiles%\Java\jre7\bin\jqs.exe" -disable>> "%LOGPATH%\%LOGFILE%"
346
"%ProgramFiles(x86)%\Java\jre6\bin\jqs.exe" -unregister>> "%LOGPATH%\%LOGFILE%"
347
"%ProgramFiles(x86)%\Java\jre7\bin\jqs.exe" -unregister>> "%LOGPATH%\%LOGFILE%"
348
"%ProgramFiles%\Java\jre6\bin\jqs.exe" -unregister>> "%LOGPATH%\%LOGFILE%"
349
"%ProgramFiles%\Java\jre7\bin\jqs.exe" -unregister>> "%LOGPATH%\%LOGFILE%"
350
msiexec.exe /x {4A03706F-666A-4037-7777-5F2748764D10} /qn /norestart
351
echo.
352
353
:: Nuke 32-bit Java installation directories
354
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles(x86)%\Java\jre*" directories...>> "%LOGPATH%\%LOGFILE%"
355
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles(x86)%\Java\jre*" directories...
356
for /D /R "%ProgramFiles(x86)%\Java\" %%X in (j2re*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
357
for /D /R "%ProgramFiles(x86)%\Java\" %%X in (jre*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
358
rmdir /S /Q "%ProgramFiles(x86)%\JavaSoft\JRE">> "%LOGPATH%\%LOGFILE%"
359
360
:: Nuke 64-bit Java installation directories
361
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles%\Java\jre*" directories...>> "%LOGPATH%\%LOGFILE%"
362
echo %CUR_DATE% %TIME%   Removing "%ProgramFiles%\Java\jre*" directories...
363
for /D /R "%ProgramFiles%\Java\" %%X in (j2re*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
364
for /D /R "%ProgramFiles%\Java\" %%X in (jre*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
365
rmdir /S /Q "%ProgramFiles%\JavaSoft\JRE">> "%LOGPATH%\%LOGFILE%"
366
367
:: Nuke Java installer cache ( thanks to reddit.com/user/cannibalkitteh )
368
echo %CUR_DATE% %TIME%   Purging Java installer cache...>> "%LOGPATH%\%LOGFILE%"
369
echo %CUR_DATE% %TIME%   Purging Java installer cache...
370
ver | find "XP"
371
IF %ERRORLEVEL%==0 (
372
    ::::::::::::::::
373
    :: XP version ::
374
    ::::::::::::::::
375
    :: Get list of users, put it in a file, then use it to iterate through each users profile, deleting the AU folder
376
    dir "%SystemDrive%\Documents and Settings\" /B > %TEMP%\userlist.txt
377
    for /f "tokens=* delims= " %%a in (%TEMP%\userlist.txt) DO RMDIR /S /Q "%SystemDrive%\Users\%%a\AppData\LocalLow\Sun\Java\AU">> "%LOGPATH%\%LOGFILE%"
378
    for /D /R "%SystemDrive%\Documents and Settings\" %%X in (jre*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
379
) ELSE (
380
    ::::::::::::::::::::::::::
381
    :: Vista and up version ::
382
    ::::::::::::::::::::::::::
383
    :: Get list of users, put it in a file, then use it to iterate through each users profile, deleting the AU folder
384
    dir %SystemDrive%\Users /B > %TEMP%\userlist.txt
385
    for /f "tokens=* delims= " %%a in (%TEMP%\userlist.txt) DO RMDIR /S /Q "%SystemDrive%\Users\%%a\AppData\LocalLow\Sun\Java\AU">> "%LOGPATH%\%LOGFILE%"
386
    :: Get the other JRE directories
387
    for /D /R "%SystemDrive%\Users" %%X in (jre*) DO RMDIR /S /Q "%%X">> "%LOGPATH%\%LOGFILE%"
388
    )
389
390
:: Miscellaneous stuff, sometimes left over by the installers
391
echo %CUR_DATE% %TIME%   Searching for and purging other Java Runtime-related directories...>> "%LOGPATH%\%LOGFILE%"
392
echo %CUR_DATE% %TIME%   Searching for and purging other Java Runtime-related directories...
393
echo.
394
del /F /Q %SystemDrive%\1033.mst>> "%LOGPATH%\%LOGFILE%"
395
del /F /S /Q "%SystemDrive%\J2SE Runtime Environment*">> "%LOGPATH%\%LOGFILE%"
396
echo.
397
398
echo %CUR_DATE% %TIME%   File and directory cleanup done.>> "%LOGPATH%\%LOGFILE%"
399
echo %CUR_DATE% %TIME%   File and directory cleanup done.
400
echo. >> "%LOGPATH%\%LOGFILE%"
401
echo.
402
403
:: Check if we wanted to install a new version of the JRE. If we didn't, then go ahead and exit.
404
IF %REINSTALL_JAVA%==yes (
405
    echo %CUR_DATE% %TIME% ! Variable "REINSTALL_JAVA" was set to 'yes'. Now installing %JAVA_BINARY%...>> "%LOGPATH%\%LOGFILE%"
406
    echo %CUR_DATE% %TIME% ! Variable "REINSTALL_JAVA" was set to 'yes'. Now installing %JAVA_BINARY%...
407
    "%JAVA_LOCATION%\%JAVA_BINARY%" %JAVA_ARGUMENTS%
408
    java -version
409
    echo Done.>> "%LOGPATH%\%LOGFILE%"
410
    )
411
412
:: Done.
413
echo %CUR_DATE% %TIME%   Registry hive backups: %TEMP%\java_purge_registry_backup\>> "%LOGPATH%\%LOGFILE%"
414
echo %CUR_DATE% %TIME%   Registry hive backups: %TEMP%\java_purge_registry_backup\
415
echo %CUR_DATE% %TIME%   Log file: "%LOGPATH%\%LOGFILE%">> "%LOGPATH%\%LOGFILE%"
416
echo %CUR_DATE% %TIME%   Log file: "%LOGPATH%\%LOGFILE%"
417
echo %CUR_DATE% %TIME%   JAVA NUKER COMPLETE. Recommend rebooting and washing your hands.>> "%LOGPATH%\%LOGFILE%"
418
echo %CUR_DATE% %TIME%   JAVA NUKER COMPLETE. Recommend rebooting and washing your hands.
419
420
:: Return exit code to SCCM/PDQ Deploy/PSexec/etc
421
exit /B %EXIT_CODE%