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