모든 Sun Java 버전을 제거하기위한 배치 파일?


11

사무실에서 Java를 최신 상태로 유지하도록 시스템을 설정하고 있습니다. 모든 사람은 모든 다른 버전의 Java를 가지고 있으며, 대부분은 오래되고 안전하지 않으며 일부는 1.4까지 거슬러 올라갑니다. .msi 파일을 푸시하고 자동으로 실행할 수있는 System Center Essentials 서버가 있으며 최신 Java를 설치할 수 있는지 이미 테스트했습니다. 그러나 이전 버전 (예 : 1.4)은 설치 관리자가 제거하지 않으므로 제거해야합니다. 모두가 Windows XP를 실행하고 있습니다.

깔끔한 우연의 일치는 Sun이 Oracle에 의해 방금 구입했으며 Oracle이 이제 "Sun"의 모든 인스턴스를 Java에서 "Oracle"로 변경 한 것입니다. 따라서 검색을 수행하고 모든 Sun 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 버전 비 호환성으로 인해 고통을 겪지 않았습니다 (HP 저는 당신을보고 있습니다). 여러 버전의 Java를 설치하는 스크립트를 작성하고 싶은 마음이 든다면
Jim B

3
보안이 주요 관심사입니다. 오래된 버전의 JVM은 최근의 공격에서 매우 널리 이용되었습니다. Windows 7 시스템조차도 영향을 받았습니다.
Joshua

1
보안을 위해 절대적으로. 지난 몇 시간 동안 사무실 전체에 최신 Java를 성공적으로 배포했지만 이전 버전은 계속 남아 있습니다. 스파이웨어를 설치하기 위해 컴퓨터에 설치되어 있지만 휴면 상태 인 이전 버전의 Java를 사용할 수있는 익스플로잇에 대해 들어 본 적이 있으며 컴퓨터에 최신 Java 만 설치하면 이러한 문제를 피할 수 있습니다.
Ricket

방금 찾은 또 다른 접근법은 다음과 같습니다. ivan.dretvic.com/2011/02/…
Craig Ringer

답변:


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

대단해! 이전 Java 버전을 아직 정리하지 않았으므로이를 시작 스크립트에 통합해야한다고 생각합니다. 공유해 주셔서 감사합니다!
Ricket

8

이 줄은 모든 버전의 JAVA를 제거합니다.

"이름은 'Java %% %%'와 같은 이름"호출 제거 ​​/ 비 대화식


감사합니다. 이것은 내 시스템에서 잘 작동합니다. 이 단일 명령으로 Java 7과 Java 8 버전을 모두 제거했습니다.
Michael S.

감사! 이것은 모든 오래된 Java 버전을 제거하는 가장 좋은 cmd입니다. 관리자 권한으로 실행해야합니다.
PatricK

1

http://www.java.com/en/download/faq/remove_olderversions.xml 에서 발췌

시간이 지남에 따라 사용 가능한 Java 컨텐츠를 실행하기 위해 여러 버전의 Java를 설치했을 수 있습니다. 과거에는 각 Java 업데이트가 시스템의 별도 디렉토리에 설치되었습니다. 그러나 Java 업데이트는 이제 단일 디렉토리에 설치됩니다.

이전 버전의 Java를 제거해야합니까? 사용자는 시스템에서 모든 이전 버전의 Java를 제거하는 것이 좋습니다. 시스템에 오래되고 지원되지 않는 Java 버전을 유지하면 심각한 보안 위험이 있습니다. 시스템에서 이전 버전의 Java를 제거하면 시스템에서 최신 보안 및 성능 향상으로 Java 응용 프로그램이 실행됩니다.

이론적으로 이전 버전의 Java를 올바르게 제거하는 다음 VBScript를 찾았습니다. 다른 사람들이 그것을 완벽하게 조정했기 때문에 상향식에서 읽는 것이 가장 좋습니다.

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


"바닥에서 읽는 것이 가장 좋습니다"–이 경우 가장 좋은 스크립트를 여기에 복사해야합니다
jcollum

1

이 간단하지만 매우 유용한 명령을 확인하십시오.

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

여기서 도난 당했어


0

여기 에 msi없이 그룹 정책을 통해 배포 할 수 있는 vbscript 코드 가 있습니다.


0

가장 많이 투표 된 검증 된 답변에는 몇 가지 문제가 있습니다. 테스트에 따라 6.0 시리즈 CLSID가 잘못되었습니다.

다음은 각 JRE 시리즈에서 작동하는 것으로 밝혀진 CLSID입니다. 제거하려는 원하는 버전의 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}

1.4.2 시리즈 JRE MSI가 재부팅을 원하는 경우를 대비하여 / q 뒤에 / norestart를 추가하는 것이 좋습니다.

msiexec /x <insert_CLSID_here> /q /norestart

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

필요에 따라 원하는 방식으로 적응 / 수정할 수 있습니다. ;-)


시스템 관리자 인 경우 경고없이이를 실행하지 마십시오. 강제로 죽이는 Java 시스템 전체는 일부 사람들을 화나게 할 것입니다. 예를 들어 매일 Eclipse를 사용하고 일부 사람들은 OpenOffice / LibreOffice를 사용합니다. 필자의 질문 (5 년 전)은 모든 사람의 컴퓨터에서 실행되는 스크립트를 자동으로 배포하고 이전 버전의 Java를 제거하는 방법을 찾고 있었기 때문에 이것에 대해서만 언급합니다. 분명히 이것은 잘되지 않을 것입니다. 또는 최소한 taskkill 줄을 제거 할 것입니다.
Ricket

0

이것은 나를 위해 일했습니다. 최신 버전 (작성 당시 v8.0.66) 이전의 모든 버전의 Java (32 비트 및 64 비트)를 설치 제거합니다.

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.