gpt4 book ai didi

windows - VBScript 中的字符串比较

转载 作者:可可西里 更新时间:2023-11-01 10:26:12 28 4
gpt4 key购买 nike

我为 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.257.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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com