Я написал чек для Nagios, чтобы определить, установлена ли в настоящее время версия Java, или если есть Обновления, которые необходимо применить.Сравнение строк в VBScript
Сначала я получаю как установленную в настоящее время версию Java (используя некоторый код, который я нашел для получения установленной версии), так и новейшую доступную версию (используя документ http://java.com/applet/JreCurrentVersion2.txt). Тогда я трансформировать их с помощью регулярных выражений (результат: $ 1. $ 2. $ 3) в том же стиле, например:
7.0.25
При печати преобразованные версии через Wscript. Echo Я вижу, оба они идентичны, но оператор сравнения строк StrComp() всегда возвращает false, если строки равны или различны. С старой версии установлен я получаю
Critical: Java Version 7.0.24 - доступен: 7.0.25
, который предназначен, но с правильной версией я также получаю
Critical: Java Version 7.0.25 - доступен: 7.0.25
вместо
OK: Java Version 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
Спасибо, это была та часть, которую я искал. – Salandas