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

11

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

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

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

@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, и я хочу их избежать.

Ricket
источник
из любопытства, почему вы хотите это сделать. Несовместимость версий Java причиняла мне бесконечный боль (HP, я смотрю на тебя). Во всяком случае, у меня возникнет соблазн написать сценарий для установки нескольких версий Java
Джим Б
3
Безопасность будет главной заботой. Устаревшие версии JVM были очень популярны в недавних атаках. Были затронуты даже машины с Windows 7.
Джошуа
1
Абсолютно для безопасности. В последние пару часов я успешно развернул последнюю версию Java в офисе, но эти старые версии все еще остаются. Я слышал об эксплойтах, которые могли использовать более старую версию Java, которая была установлена, но бездействовала на машине, для установки шпионского ПО, и я хочу избежать всего этого, ТОЛЬКО установив новейшую Java на компьютеры.
Рикет
Вот еще один подход, который я только что нашел: ivan.dretvic.com/2011/02/…
Крейг Рингер

Ответы:

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
источник
Замечательно! Я еще не очистил старые версии Java, поэтому думаю, что интегрирую это в наш стартовый скрипт. Спасибо, что поделился!
Ricket
8

Эта строка удалит все версии JAVA:

wmic product, где "name like 'Java %% %%'" вызывает удаление / nointeractive

user154791
источник
Спасибо. Это хорошо работает в моей системе. Эта единственная команда удалила обе мои Java 7, а также обе мои версии Java 8.
Майкл С.
Благодарность! Это лучший cmd для удаления всех старых версий Java. Просто нужно убедиться, что это Запуск от имени администратора.
PatricK
1

Выдержка из: http://www.java.com/en/download/faq/remove_olderversions.xml

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

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

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

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

Поли Д
источник
«Лучше всего читать снизу вверх» - в этом случае вам следует скопировать лучший сценарий сюда
jcollum
1

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

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

украден отсюда

Игиты
источник
0

Там какие - то VBScript код здесь , что вы должны быть в состоянии развернуть с помощью групповой политики без MSI.

nedm
источник
0

У проверенного ответа с самым высоким рейтингом есть некоторые проблемы. CLSID серии 6.0 неверны, основываясь на моем тестировании.

Вот CLSID, которые я нашел для каждой серии JRE. Замените xx на нужные версии, которые вы хотите удалить. Пожалуйста, используйте с /server//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 на тот случай, если MSI JRE серии 1.4.2 потребует перезагрузки.

msiexec /x <insert_CLSID_here> /q /norestart
CrimsonKnight13
источник
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
источник
Если вы системный администратор, не запускайте это без предупреждения. Принудительное убийство всей системы Java может расстроить некоторых людей - например, я использую Eclipse каждый день, а некоторые люди используют OpenOffice / LibreOffice. Я упоминаю об этом только потому, что мой вопрос (пять лет назад) состоял в том, что я искал способ молча развернуть сценарий, который запускался бы на всех компьютерах, и удалить старые версии Java. Ясно, что это не очень хорошо, иначе я бы убрал строки по заданию.
Ricket
0

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

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
Reado
источник