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% |