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