VBScript用于查询名称空间值,如果%则运行X.bat

问题描述 投票:0回答:1

我正在尝试VBScript一个进程来检查PC上的TPM命名空间(因为我认为它不可能作为批处理文件),如果它是2.0版,则返回“YES”回显提示,但到目前为止它似乎只返回一个FALSE值,即使我知道正确的结果是TRUE(2.0,0,1.16)。

如果我可以将“TPM SpecVersion”放入我的If语句中,我最终会让脚本在PXE构建期间运行降级实用程序,但我现在只使用echo,因此我可以找到TPM版本的识别。

这就是我到目前为止一起入侵的原因(dev2.vbs):

Dim strTPM
strTPM = "wmic /namespace:\\root\cimv2\security\microsofttpm path win32_tpm get SpecVersion"

If strTPM = "%2.0%" Then
    WScript.Echo "YES"
Else
    WScript.Echo "Nup"
End If

我知道我可以在命令提示符中运行wmic查询并获取正确的TPM版本,但我似乎无法在该脚本中正确显示该结果。我每次都会收到“Nup”的回声弹出窗口。

我已经尝试了一些来自VBScripts在线的替代语法,这些语法引用了活动服务,包括以下内容,但它们都是错误的,甚至不会产生FALSE回显结果。

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery("SELECT * FROM Win32_TPM WHERE SpecVersion='%2.0%'")
For Each objtpm In colItem
    Return = objSpecVersion.Value()
    If Return = "%2.0%" Then
        WScript.Echo "YES YES YES"
    Else
        WScript.Echo "Nup"
    End If
Next

任何人都可以帮我获取命名空间查找结果,以过滤下面的If..Else语句吗?

如果可以,我想避免使用PowerShell。

vbscript wmi wmic tpm
1个回答
1
投票

从您的比较字符串(%2.0%)判断,您尝试在版本字符串上进行部分匹配。但是,您使用的运算符用于完全匹配。更不用说你的第一个代码片段根本无法工作,因为你从未真正执行你定义的命令字符串。

WQL query中的过滤器子句从SpecVersion='%2.0%'更改为SpecVersion LIKE '%2.0%',并使用正确的变量(objtpm而不是未定义的objSpecVersion),代码应生成预期结果。

found = False
qry   = "SELECT * FROM Win32_TPM WHERE SpecVersion LIKE '%2.0%'"
For Each objtpm In objWMIService.ExecQuery(qry)
    found = True
Next

If found Then
    WScript.Echo "Yes"
Else
    WScript.Echo "No"
End If

或者从查询中删除filter子句,并与循环内的InStr函数进行部分比较:

qry = "SELECT * FROM Win32_TPM"
For Each objtpm In objWMIService.ExecQuery(qry)
    specVerion = objtpm.SpecVersion
    If InStr(specVersion, "2.0") > 0 Then
        WScript.Echo "Yes"
    Else
        WScript.Echo "No"
    End If
Next
© www.soinside.com 2019 - 2024. All rights reserved.