Я настраиваю систему, чтобы поддерживать Java в нашем офисе в актуальном состоянии. У всех есть разные версии Java, многие из них старые и небезопасные, а некоторые относятся к 1.4. У меня есть сервер System Center Essentials, который может выталкивать и запускать файл .msi без вывода сообщений, и я уже проверил, что он может установить последнюю версию Java. Но старые версии (например, 1.4) не удаляются установщиком, поэтому мне нужно их удалить. Все работают под Windows XP.
Чистое совпадение заключается в том, что Sun только что была куплена Oracle, а теперь Oracle заменила все экземпляры Sun на Oracle в Java. Таким образом, мне удобно не беспокоиться об удалении последней версии Java, потому что я могу просто выполнить поиск и удалить все солнце Программы на 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, и я хочу избежать их.
Эта строка удалит все версии JAVA:
продукт wmic, где "имя как 'Java %% %%'" вызывает удаление / nointeractive
Вот что мы используем, отлично работает в качестве сценария запуска:
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
Проверьте эту простую, но очень полезную команду:
wmic product where "name like 'Java(TM) 6%%'" call uninstall /nointeractive
украдено из Вот
Выдержка из: http://www.java.com/en/download/faq/remove_olderversions.xml
Со временем вы могли установить несколько версий Java для запуска доступного содержимого Java. Раньше каждое обновление Java устанавливалось в отдельных каталогах вашей системы. Однако обновления Java теперь устанавливаются в одном каталоге.
Стоит ли удалять старые версии Java? Мы настоятельно рекомендуем пользователям удалить все старые версии Java из вашей системы. Хранение старых и неподдерживаемых версий Java в вашей системе представляет серьезную угрозу безопасности. Удаление старых версий Java из вашей системы гарантирует, что приложения Java будут работать с самыми последними улучшениями безопасности и производительности в вашей системе.
Я нашел следующий сценарий VBScript, который теоретически правильно удаляет предыдущие версии Java. Лучше читать снизу вверх, поскольку другие довели его до совершенства:
Есть некоторый код vbscript Вот что вы должны иметь возможность развертывать через групповую политику без msi.
У проверенного ответа, получившего наибольшее количество голосов, есть некоторые проблемы. 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 на тот случай, если MSI-файлы JRE серии 1.4.2 потребуют перезагрузки.
msiexec /x <insert_CLSID_here> /q /norestart
Вы все еще можете выполнить пакетный скрипт. Я использую следующий сценарий;
@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
Вы можете адаптировать / изменить так, как хотите, в соответствии со своими потребностями. ;-)
Это сработало для меня. Он удаляет все версии Java (32-битные и 64-битные) до последней версии (которая на момент написания была v8.0.66).
wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall