現在インストールされているJavaのバージョンが最新かどうか、または適用する更新があるかどうかを検出するNagiosのチェックを書きました。
まず、現在インストールされている Java のバージョン (現在インストールされているバージョンを取得するために見つけたコードを使用) と、利用可能な最新バージョン (ドキュメントhttp://java.com/applet/JreCurrentVersion2.txtを使用) の両方を取得します。次に、正規表現 (結果: $1.$2.$3 ) を使用してそれらを同じスタイルに変換します。
7.0.25
Wscript.Echoを介して変換されたバージョンを出力すると、どちらも同じですが、文字列比較演算子StrComp()は、文字列が等しいか異なる場合、常にfalseを返します。古いバージョンがインストールされていると、
クリティカル: Java バージョン 7.0.24 - 利用可能: 7.0.25
これは意図されていますが、正しいバージョンでも取得できます
クリティカル: Java バージョン 7.0.25 - 利用可能: 7.0.25
それ以外の
OK: Java バージョン 7.0.25
以下に完全なスクリプトを添付しました。
check_java.vbs
On Error Resume Next
CONST rOK = 0
CONST rWarning = 1
CONST rCritical = 2
CONST rUnknown = 3
blnJavaInstalled = False
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProducts = objWMIService.ExecQuery("SELECT Version FROM Win32_Product")
For Each objProduct in colProducts
If Err.Number = 0 Then
If (InStr(UCase(objProduct.Name),"JAVA") And Not InStr(UCase(objProduct.Name),"UPDATER")) Then
blnJavaInstalled = True
version = objProduct.Version
End If
End If
Next
If blnJavaInstalled <> True Then
Wscript.Echo "No Java found."
Wscript.Quit(rUnknown)
End If
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "([0-9]+)\.([0-9]+).([0-9]*[1-9])0*"
curVersion = objRegEx.Replace(version, "$1.$2.$3")
Dim o
Set o = CreateObject("MSXML2.XMLHTTP")
o.open "GET", "http://java.com/applet/JreCurrentVersion2.txt", False
o.send
Set objRegEx = CreateObject("VBScript.RegExp")
objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.Pattern = "1\.([0-9]+)\.([0-9]+)_([0-9]+)"
newVersion = objRegEx.Replace(o.responseText, "$1.$2.$3")
If StrComp(curVersion, newVersion) Then
Wscript.Echo "OK: Java Version " & curVersion
Wscript.Quit(rOK)
Else
Wscript.Echo "Critical: Java Version " & curVersion & " - available: " & newVersion
Wscript.Quit(rCritical)
End If