PCからJavaを根こそぎサイレント・アンインストールするスクリプト(グループポリシー対応)

2012年年末からのJava脆弱性ニュースによりJavaプラグインを無効化するようにとのお達しがありますが、全国に数百台あるPCに対していちいちそんなめんどくさい手順なんかやってられないですし、手順書を渡した所でユーザーがやってくれるとも限らないし、もうなんだかめんどくさいしJavaなんかオワコンだしJWSとかAppletとかしらねーしクライアントPCのJavaなんかいらないしとかなんとかいう訳で自動的にアンインストールする術を探していたら


http://web2.minasi.com/forum/topic.asp?TOPIC_ID=39459


こんなサイトを発見したので、丸パクリしつつ多少改変して作成した自動アンインストールするスクリプト(vbs)は以下の通り。

' 参考 http://web2.minasi.com/forum/topic.asp?TOPIC_ID=39459
'Javaを根こそぎアンインストール

'制御ファイル兼ログファイルを作って1度だけ実行されるようにする
strLogFileName = "C:\JavaUninstallLog_20130122.log"
Set fso = CreateObject("Scripting.FileSystemObject")

if fso.FileExists(strLogFileName) then
	'既に実行済みなら何もしない
	WScript.Quit
end if

'WMI呼び出し
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")

'エラー出ても無視して続行するようにする
'※objWMIService.ExecQueryでnullが返るとその後のFor Eachがエラーになるため(Nullチェックも効かない)
On Error Resume Next

'ログファイルを作って開く
Set ts = fso.CreateTextFile(strLogFileName)

'以下アンインストール処理
ts.WriteLine "Java根こそぎアンインストール処理開始:" & Now
'Java 1.4系
Set colJava = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java 2 Runtime %'")
For Each objSoftware in colJava
	ts.WriteLine objSoftware.Caption & " をアンインストールします"
	ts.WriteLine "アンインストール終了:" & objSoftware.Uninstall()
Next

'Java 5系
Set colJava = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'J2SE Runtime Environment %'")
For Each objSoftware in colJava
	ts.WriteLine objSoftware.Caption & " をアンインストールします"
	ts.WriteLine "アンインストール終了:" & objSoftware.Uninstall()
Next

'Java 6系 update
Set colJava = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java(TM) 6 %'")
For Each objSoftware in colJava
	ts.WriteLine objSoftware.Caption & " をアンインストールします"
	ts.WriteLine "アンインストール終了:" & objSoftware.Uninstall()
Next

'Java 7系 update
Set colJava = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java(TM) 7 %'")
For Each objSoftware in colJava
	ts.WriteLine objSoftware.Caption & " をアンインストールします"
	ts.WriteLine "アンインストール終了:" & objSoftware.Uninstall()
Next

'Java 7 系 新しめの物
Set colJava = objWMIService.ExecQuery("Select * from Win32_Product Where Name like 'Java 7 %'")
For Each objSoftware in colJava
	ts.WriteLine objSoftware.Caption & " をアンインストールします"
	ts.WriteLine "アンインストール終了:" & objSoftware.Uninstall()
Next

ts.WriteLine "Java根こそぎアンインストール処理終了:" & Now
ts.Close()

Set colJava = Nothing
Set objWMIService = Nothing
Set ts = Nothing
Set fso = Nothing



スクリプト全体をコピって、JavaUninstall.vbsみたいな名前か何かで保存して実行すればよし。
バックグラウンドで自動的にすべてのJavaがアンインストールされます。
実行後はC:\直下のJavaUninstallLog_20130122.logにログが出ますので確認すればOK
インストールされているソフトの一覧を抽出してるので、スクリプトの実行は結構時間かかります。(5〜10分?)


で、AD環境で適応させたければグループポリシーでユーザーのログオンスクリプトにでも設定しておけばめでたくJavaが駆逐できます。


Windows XP SP3環境で実行確認してますが、抽出条件ミスると必要なソフトまでアンインストールされかねないので、Your Own Riskでお願いします。


JDKも消したかったら「Java SE Development %」とあたりで抽出すればよいのではないかと。