Пакетный файл для удаления всех версий Sun Java?

Я создаю систему для обновления Java в нашем офисе. У всех есть разные версии Java, многие из которых старые и небезопасные, а некоторые - до 1.4. У меня есть сервер System Center Essentials, который может выталкивать и молча запускать .msi-файл, и я уже тестировал, что он может установить последнюю Java. Но старые версии (например, 1.4) не удаляются установщиком, поэтому мне нужно их удалить. Все работают под управлением Windows XP.

Оптимальное совпадение заключается в том, что Sun только что приобрел Oracle, и Oracle теперь изменила все экземпляры «Sun» на «Oracle» на Java. Поэтому мне нелегко беспокоиться об удалении последней Java, потому что я могу просто выполнить поиск и удалить все программы Java Sun .

Я нашел следующий пакетный скрипт на форуме , который выглядели многообещающими:

@echo off & cls
Rem List all Installation subkeys from uninstall key.
echo Searching Registry for Java Installs
for /f %%I in ('reg query HKLM\SOFTWARE\microsoft\windows\currentversion\uninstall') do echo %%I | find "{" > nul && call :All-Installations %%I
echo Search Complete..
goto :EOF
:All-Installations
Rem Filter out all but the Sun Installations
for /f "tokens=2*" %%T in ('reg query %1 /v Publisher 2^> nul') do echo %%U | find "Sun" > nul && call :Sun-Installations %1
goto :EOF
:Sun-Installations
Rem Filter out all but the Sun-Java Installations. Note the tilda + n, which drops all the subkeys from the path
for /f "tokens=2*" %%T in ('reg query %1 /v DisplayName 2^> nul') do echo . Uninstalling - %%U: | find "Java" && call :Sun-Java-Installs %~n1
goto :EOF
:Sun-Java-Installs
Rem Run Uninstaller for the installation
MsiExec.exe /x%1 /qb
echo . Uninstall Complete, Resuming Search..
goto :EOF

Однако, когда я запускаю скрипт, я получаю следующий вывод:

Searching Registry for Java Installs
'DEV_24x6' is not recognized as an internal or external command,
operable program or batch file.
'SUBSYS_542214F1' is not recognized as an internal or external command,
operable program or batch file.

И затем, кажется, висит, и я ctrl-c, чтобы остановить его.

Чтение скрипта, я все не понимаю, но я не знаю, почему он пытается запускать части ключей реестра в виде программ. Что не так с пакетным скриптом? Как я могу исправить это, чтобы я мог перейти к тому, чтобы каким-то образом превратить его в MSI и развернуть его всем для очистки этого офиса?

Или, альтернативно, можете ли вы предложить лучшее решение или существующий файл MSI, чтобы делать то, что мне нужно? Я просто хочу убедиться, что все старые версии Java отключены от всех компьютеров, так как я слышал об эксплойтах, которые заставляют загружать веб-страницы с использованием старых версий Java, и я хочу их избежать.

11 голосов | спросил Ricket 3 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 03 Sep 2010 20:00:03 +0400 2010, 20:00:03

8 ответов


6

Следующее - это то, что мы используем, отлично работает как сценарий запуска:

on error resume next

dim WshShell
dim RegKey
dim ScriptVerKey

Set WshShell = CreateObject("WScript.Shell")

'checks to see if registry key exists, if it does, the cleanup runs.
RegKey = "HKLM\SOFTWARE\EDU\Cleanup\"
ScriptVerKey = WshShell.RegRead(RegKey & "JAVAOldVer")

if ScriptVerKey <> "1" Then 
  Cleanup()
 Else 
  WScript.Quit
End If

Sub Cleanup()

' Uninstall Java 1.4.1.01
WshShell.Run "msiexec /x {1666FA7C-CB5F-11D6-A78C-00B0D079AF64} /q",1,True
' Uninstall Java 1.4.2.04
WshShell.Run "msiexec /x {7148F0A8-6813-11D6-A77B-00B0D0142040} /q",1,True
' Uninstall Java 5.0.2
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150020} /q",1,True
' Uninstall Java 5.0.4
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150040} /q",1,True
' Uninstall Java 5.0.5
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150050} /q",1,True
' Uninstall Java 5.0.6
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150060} /q",1,True
' Uninstall Java 5.0.7
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150070} /q",1,True
' Uninstall Java 5.0.10
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150100} /q",1,True
' Uninstall Java 5.0.11
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150110} /q",1,True
' Uninstall Java 5.0.12
'WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0150120} /q",1,True
' Uninstall Java 6.0.0
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160000} /q",1,True
' Uninstall Java 6.0.1
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160010} /q",1,True
' Uninstall Java 6.0.2
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160020} /q",1,True
' Uninstall Java 6.0.5
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160050} /q",1,True
' Uninstall Java 6.0.30 (020608)
WshShell.Run "msiexec /x {3248F0A8-6813-11D6-A77B-00B0D0160030} /q",1,True


'regkey below stops the script from running again
WshShell.RegWrite "HKLM\Software\EDU\", "Default"
WshShell.RegWrite "HKLM\Software\EDU\Cleanup\", "Default"
WshShell.RegWrite "HKLM\Software\EDU\Cleanup\JAVAOldVer", 1, "REG_SZ"

End Sub
ответил edusysadmin 5 +04002010-10-05T04:17:33+04:00312010bEurope/MoscowTue, 05 Oct 2010 04:17:33 +0400 2010, 04:17:33
8

В этой строке будут удалены все версии JAVA:

wmic product, где "name like" Java %% %% '"call uninstall /nointeractive

ответил user154791 17 Jam1000000amThu, 17 Jan 2013 02:57:22 +040013 2013, 02:57:22
1

Отрывок из: http://www.java.com/ru/download/faq/remove_olderversions. XML

  

Со временем вы, возможно, установили   несколько версий Java для запуска   доступный контент Java. В прошлом,   каждое обновление Java было установлено в   отдельные каталоги в вашей системе.    Однако обновления Java теперь установлены в одном каталоге.

     

Следует ли удалить старые версии   Джава? Мы настоятельно рекомендуем пользователям удалить   все более старые версии Java от вашего   система. Сохранение старых и неподдерживаемых   версии Java в вашей системе   представляет серьезную угрозу безопасности.   Удаление старых версий Java из   ваша система гарантирует, что Java   приложения будут работать с наибольшим   современная безопасность и производительность   улучшения в вашей системе.

Я нашел следующий VBScript, который теоретически корректно удаляет предыдущие версии Java. Лучше всего читать снизу вверх , так как другие улучшили его до совершенства:

http://www.appdeploy.com/messageboards/tm.asp ? т = 29809

ответил Paulie D 26 FebruaryEurope/MoscowbSat, 26 Feb 2011 01:34:32 +0300000000amSat, 26 Feb 2011 01:34:32 +030011 2011, 01:34:32
1

Проверьте эту простую, но очень полезную команду:

wmic product where "name like 'Java(TM) 6%%'" call uninstall /nointeractive

украден из здесь

ответил higuita 4 Jpm1000000pmFri, 04 Jan 2013 22:37:19 +040013 2013, 22:37:19
0

Есть код vbscript здесь , что вы должны иметь возможность развертывать через групповую политику без msi.

ответил nedm 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSat, 04 Sep 2010 02:18:23 +0400 2010, 02:18:23
0

В верхнем голосовавшем подтвержденном ответе есть некоторые проблемы с ним. CLSID 6.0 серии являются неправильными в зависимости от моего тестирования.

Вот CLSID, которые я нашел для работы для каждой серии JRE. Замените xx для желаемых версий, которые вы хотите удалить. Используйте https://serverfault.com/a/187552/172014

4.2_xx
{7148F0A8-6813-11D6-A77B-00B0D0142xx0}

5.0_xx
{3248F0A8-6813-11D6-A77B-00B0D0150xx0}

6.0_xx
{26A24AE4-039D-4CA4-87B4-2F832160xxF0}

7.0_xx
{26A24AE4-039D-4CA4-87B4-2F832170xxF0}

Я рекомендую добавлять /norestart после /q, как раз в том случае, если для версии 1.4.2 серии JRE MSI требуется перезагрузка.

msiexec /x <insert_CLSID_here> /q /norestart
ответил CrimsonKnight13 1 Maypm13 2013, 23:03:03
0

Вы можете выполнить пакетный скрипт. Я использую следующий скрипт:

@ECHO OFF
REM #######################################################
REM AUTHOR: HeyVooN
REM BLOG: http://blog.teksoporte.es
REM DATE CREATED: 09/04/2015
REM Deploy Java to your Enterprise
REM This script is optimised for 32 and 64 Bit versions of Java to be installed on either 32 or 64 bit
REM operating systems. It can easily accommodate 64 bit versions of Java.
REM This script removes all previous versions of Java installed prior to (re)install any version.
REM #######################################################

REM #######################################################
REM SECTION 1 - CLEAN UP PC BEFORE INSTALLING JAVA (This section is not mandatory)
REM #######################################################
ECHO -------------------------------------------------------
ECHO STOP PROCESSES
ECHO -------------------------------------------------------
REM Assuming that processes using Java are stopped before uninstalling existing versions of Java
REM Common processes using Java: firefox.exe, iexplore.exe, chrome.exe, jusched.exe, jucheck.exe, java.exe, javacpl.exe

sc config "UI0Detect" start= disabled
sc stop UI0Detect
taskkill /F /IM jusched.exe /T
taskkill /F /IM jucheck.exe /T
taskkill /F /IM java.exe /T

ECHO -------------------------------------------------------
ECHO UNISTALL ANY PREVIOUS VERSIONS OF JAVA 32 Bit
ECHO -------------------------------------------------------
SET jver="Java 7"
SET regVar32=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
SET myCMD=REG QUERY %regVar32% /s /f %jver%
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO (
 ECHO Uninstall Key: {%%i}
 ECHO Condition: %uinstallState%
 START /WAIT MSIEXEC /x {%%i} /qn /norestart
  )

ECHO -------------------------------------------------------
ECHO UNISTALL ANY PREVIOUS VERSIONS OF JAVA 64 Bit
ECHO -------------------------------------------------------
SET jver="Java 7"
SET regVar64=HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\
SET myCMD=REG QUERY %regVar64% /s /f %jver%
FOR /f " usebackq delims={} tokens=2" %%i IN (`%myCMD%`) DO (
 ECHO Uninstall Key: {%%i}
 ECHO Condition: %uinstallState%
 START /WAIT MSIEXEC /x {%%i} /qn /norestart
  )

ECHO -------------------------------------------------------
ECHO CLEANING REGISTRY
ECHO -------------------------------------------------------
REM Removing known problem registry keys. I use the below line to SET the variable of which reg.exe to use depending on OS architecture.
REM Additional registry removal strings can be added here.
@If Defined ProgramFiles(x86) (SET "Reg32Path=%SystemRoot%\SysWOW64\reg.exe") Else (SET "Reg32Path=%SystemRoot%\System32\reg.exe")
REM %Reg32Path% DELETE HKLM\SOFTWARE\JavaSoft /va /f
%Reg32Path% DELETE "HKLM\SOFTWARE\JavaSoft\Auto Update" /va /f
%Reg32Path% DELETE "HKLM\SOFTWARE\JavaSoft\Java Update" /va /f

ECHO -------------------------------------------------------
ECHO DELETE START MENU ITEMS
ECHO -------------------------------------------------------
RD /s /q "%ProgramData%\Microsoft\Windows\Start Menu\Programs\Java"
PAUSE
EXIT /B 0

Вы можете адаптировать /изменить способ, который вам подходит. ; -)

ответил Heyvoon 15 PMpWed, 15 Apr 2015 16:39:53 +030039Wednesday 2015, 16:39:53
0

Это сработало для меня. Он удаляет все версии Java (32-разрядные и 64-разрядные) до последней версии (которая на момент написания была v8.0.66).

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
ответил Reado 7 MonEurope/Moscow2015-12-07T17:57:03+03:00Europe/Moscow12bEurope/MoscowMon, 07 Dec 2015 17:57:03 +0300 2015, 17:57:03

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132