Guest User

Java Nuker Beta Version

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