我写了一张支票Nagios检测当前安装的 Java 版本是否是最新的或者是否有要应用的更新。
首先,我获取当前安装的 Java 版本(使用我发现的一些代码来检索当前安装的版本)和最新的可用版本(使用文档 http://java.com/applet/JreCurrentVersion2.txt )。 然后我使用正则表达式(结果:$1.$2.$3)将它们转换为相同的样式,例如:
7.0.25
当通过Wscript.Echo打印转换后的版本时,我可以看到,两者是相同的,但字符串比较运算符StrComp()总是返回false,如果字符串相同或不同。 安装旧版本后,我得到
Critical: Java Version 7.0.24 - available: 7.0.25
这是有意的,但有了正确的版本我也得到了
Critical: Java Version 7.0.25 - available: 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
最佳答案
o.responseText
有一个尾随换行符,因此您实际上是将 7.0.25
与 7.0.25\r\n
进行比较,这显然不相等。您可以使用以下内容显示尾随换行符:
>>> <b>WScript.Echo "_" & o.responseText & "_"</b>
_7.0.25
_
将第二个正则表达式更改为
objRegEx.Pattern = "1\.([0-9]+)\.([0-9]+)_([0-9]+)[\s\S]*"
或者在进行正则表达式替换之前从o.responseText
中删除换行符:
newVersion = objRegEx.Replace(Replace(o.responseText, vbNewLine, ""), "$1.$2.$3")
关于windows - VBScript 中的字符串比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17215660/