Guest User

[BATCH] Java Runtime Nuker v1.4.1 (2013-07-18)

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