File batch untuk menghapus semua versi Sun Java?

11

Saya sedang menyiapkan sistem untuk menjaga agar Java di kantor kami tetap terbaru. Setiap orang memiliki semua versi Jawa yang berbeda, banyak dari mereka tua dan tidak aman, dan beberapa berasal dari 1.4. Saya memiliki server System Center Essentials yang dapat mendorong dan menjalankan file .msi, dan saya sudah menguji bahwa ia dapat menginstal Java terbaru. Tetapi versi lama (seperti 1.4) tidak dihapus oleh penginstal, jadi saya harus mencopotnya. Setiap orang menjalankan Windows XP.

Kebetulan rapi adalah bahwa Sun baru saja dibeli oleh Oracle dan Oracle sekarang telah mengubah semua instance "Sun" menjadi "Oracle" di Jawa. Jadi, saya dapat dengan mudah tidak perlu khawatir tentang menghapus instalasi Java terbaru, karena saya hanya dapat melakukan pencarian dan menghapus semua program Sun Java.

Saya menemukan skrip batch berikut pada posting forum yang tampak menjanjikan:

@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

Namun, ketika saya menjalankan skrip, saya mendapatkan output berikut:

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.

Dan kemudian muncul hang dan saya ctrl-c untuk menghentikannya.

Membaca skrip, saya tidak mengerti segalanya, tapi saya tidak tahu mengapa ini mencoba menjalankan potongan kunci registri sebagai program. Apa yang salah dengan skrip batch? Bagaimana saya bisa memperbaikinya, sehingga saya bisa beralih ke entah bagaimana mengubahnya menjadi MSI dan menyebarkannya ke semua orang untuk membersihkan kantor ini?

Atau sebagai alternatif, dapatkah Anda menyarankan solusi yang lebih baik atau file MSI yang ada untuk melakukan apa yang saya butuhkan? Saya hanya ingin memastikan untuk mengeluarkan semua versi lama Java dari komputer semua orang, karena saya pernah mendengar tentang eksploit yang menyebabkan halaman web dimuat menggunakan Java versi lama dan saya ingin menghindarinya.

Ricket
sumber
karena penasaran mengapa Anda ingin melakukan ini. Ketidakcocokan versi Java telah menyebabkan saya tiada akhir kesakitan (HP saya melihat Anda). Jika saya tergoda untuk menulis skrip untuk menginstal beberapa versi Java
Jim B
3
Keamanan akan menjadi perhatian utama. Versi lama JVM telah sangat populer dieksploitasi dalam serangan baru-baru ini. Bahkan mesin Windows 7 pun terkena dampaknya.
Joshua
1
Sepenuhnya untuk keamanan. Saya memiliki dalam beberapa jam terakhir berhasil menyebarkan Java terbaru di kantor, tetapi versi yang lebih lama masih tetap. Saya pernah mendengar tentang eksploitasi yang dapat menggunakan versi Java yang lebih lama yang diinstal tetapi tidak aktif dalam mesin, untuk menginstal spyware, dan saya ingin menghindari semua itu dengan HANYA memiliki Java terbaru di komputer.
Ricket
Inilah pendekatan lain yang baru saya temukan: ivan.dretvic.com/2011/02/…
Craig Ringer

Jawaban:

6

Berikut ini adalah apa yang kami gunakan, berfungsi dengan baik sebagai skrip startup:

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
sumber
Itu hebat! Saya belum membersihkan versi Java lama jadi saya pikir saya akan mengintegrasikan ini ke skrip startup kami. Terima kasih telah berbagi!
Ricket
8

Baris ini akan menghapus semua versi JAWA:

produk wmic di mana "nama seperti 'Java %% %%'" panggil penghapusan / nointeraktif

pengguna154791
sumber
Terima kasih. Ini bekerja dengan baik pada sistem saya. Itu menghapus kedua Java 7 saya dan juga kedua versi Java 8 saya dengan perintah tunggal ini.
Michael S.
Terima kasih! Ini adalah cmd terbaik untuk menghapus semua versi java lama. Hanya perlu memastikan itu adalah Jalankan dengan hak istimewa Administrator.
PatricK
1

Kutipan dari: http://www.java.com/en/download/faq/remove_olderversions.xml

Seiring waktu, Anda mungkin telah menginstal beberapa versi Java untuk menjalankan konten Java yang tersedia. Di masa lalu, setiap pembaruan Java diinstal di direktori terpisah di sistem Anda. Namun, pembaruan Java sekarang diinstal dalam satu direktori.

Haruskah saya menghapus versi Java yang lebih lama? Kami sangat menyarankan pengguna menghapus semua versi Java yang lebih lama dari sistem Anda. Menjaga versi Java yang lama dan tidak didukung pada sistem Anda menghadirkan risiko keamanan yang serius. Menghapus versi Java yang lebih lama dari sistem Anda memastikan bahwa aplikasi Java akan berjalan dengan keamanan paling mutakhir dan peningkatan kinerja pada sistem Anda.

Saya menemukan VBScript berikut yang, secara teori, dengan benar menghapus versi Java sebelumnya. Terbaik untuk dibaca dari bawah ke atas , karena orang lain telah mengubahnya dengan sempurna:

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

Paulie D
sumber
"Terbaik untuk membaca dari bawah ke atas" - dalam hal ini Anda harus menyalin naskah terbaik ke sini
jcollum
1

Periksa perintah sederhana namun sangat berguna ini:

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

dicuri dari sini

higuita
sumber
0

Ada beberapa kode vbscript di sini yang dapat Anda gunakan melalui Kebijakan Grup tanpa msi.

nedm
sumber
0

Jawaban terverifikasi terpilih teratas memiliki beberapa masalah dengannya. CLSIDs 6.0 series tidak benar berdasarkan pengujian saya.

Berikut adalah CLSID yang saya temukan berfungsi untuk setiap seri JRE. Ganti xx untuk versi yang diinginkan yang ingin Anda hapus. Silakan gunakan dengan /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}

Saya sarankan menambahkan / norestart setelah / q juga hanya dalam kasus seri 1.4.2 JRE MSI ingin reboot.

msiexec /x <insert_CLSID_here> /q /norestart
CrimsonKnight13
sumber
0

Anda masih dapat menyelesaikan dengan menggunakan skrip Batch. Saya menggunakan skrip berikut;

@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

Anda dapat menyesuaikan / memodifikasi cara yang Anda inginkan sesuai dengan kebutuhan Anda. ;-)

Heyvoon
sumber
Jika Anda seorang administrator sistem, jangan jalankan ini tanpa peringatan. Sistem Java yang mematikan secara paksa akan membuat beberapa orang marah - misalnya saya menggunakan Eclipse setiap hari, dan beberapa orang menggunakan OpenOffice / LibreOffice. Saya hanya menyebutkan ini karena pertanyaan saya (lima tahun lalu) adalah saya mencari cara untuk secara diam-diam menggunakan skrip yang akan berjalan di komputer semua orang dan menghapus instalan versi lama Java. Jadi jelas yang ini tidak akan berhasil, atau saya akan menghapus baris taskkill setidaknya.
Ricket
0

Ini berhasil untuk saya. Mencopot pemasangan semua versi Java (32-bit dan 64-bit) sebelum versi terbaru (yaitu v8.0.66 pada saat penulisan).

wmic product where "name like 'Java%%' and version < '8.0.66'" call uninstall
Reado
sumber