2

現在インストールされている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
4

2 に答える 2