ไฟล์ Batch เพื่อถอนการติดตั้ง Sun Java ทุกเวอร์ชัน?


11

ฉันกำลังตั้งค่าระบบเพื่อให้จาวาอยู่ในสำนักงานของเราอยู่เสมอ ทุกคนมี 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 ทำให้ฉันไม่มีอาการปวด (HP ฉันกำลังมองคุณอยู่) หากมีสิ่งใดที่ฉันอยากจะเขียนสคริปต์เพื่อติดตั้ง Java หลายเวอร์ชัน
Jim B

3
ความปลอดภัยจะเป็นประเด็นหลัก JVM เวอร์ชันที่ล้าสมัยได้รับความนิยมอย่างมากในการโจมตีครั้งล่าสุด แม้แต่เครื่อง Windows 7 ก็ยังได้รับผลกระทบ
โจชัว

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 ทุกรุ่น:

ผลิตภัณฑ์ wmic ที่ "ชื่อเช่น 'Java %% %%'" โทรถอนการติดตั้ง / ไม่มีการโต้ตอบ


ขอขอบคุณ. สิ่งนี้ทำงานได้ดีในระบบของฉัน มันลบทั้ง Java 7 ของฉันเช่นเดียวกับทั้ง Java 8 รุ่นของฉันด้วยคำสั่งเดียวนี้
Michael S.

ขอบคุณ! นี่คือ cmd ที่ดีที่สุดสำหรับการลบจาวาเวอร์ชันเก่าทั้งหมด เพียงแค่ต้องแน่ใจว่ามันเป็นสิทธิ์การใช้งานแบบผู้ดูแลระบบ
PatricK

1

ตัดตอนมาจาก: http://www.java.com/th/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



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 after / q และในกรณีที่ 1.4.2 series JRE MSIs ต้องการรีบูต

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 ฉันเพิ่งพูดถึงสิ่งนี้เพราะคำถามของฉัน (เมื่อห้าปีก่อน) คือฉันกำลังมองหาวิธีที่จะใช้งานสคริปต์อย่างเงียบ ๆ ที่จะทำงานบนคอมพิวเตอร์ของทุกคนและถอนการติดตั้ง Java เวอร์ชันเก่า เห็นได้ชัดว่าอันนี้จะไม่ดีหรือฉันจะลบเส้น taskkill อย่างน้อย
Ricket

0

สิ่งนี้ใช้ได้สำหรับฉัน มันถอนการติดตั้ง Java ทุกเวอร์ชัน (32- บิตและ 64- บิต) ก่อนเวอร์ชั่นล่าสุด (ซึ่งคือ v8.0.66 ในขณะที่เขียน)

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.