VBScript查询名称空间值,如果%然后运行X.bat

时间:2019-02-21 09:22:56

标签: vbscript wmi wmic tpm

我正在尝试使用VBScript处理PC机上的TPM名称空间的过程(因为我认为不可能将其作为批处理文件),如果它是2.0版,则返回“ YES”回显提示,但到目前为止即使我知道正确的结果为TRUE(2.0,0,1.16),也只返回FALSE值。

如果我可以在我的If语句中获取“ TPM SpecVersion”,则最终我将使脚本在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。

1 个答案:

答案 0 :(得分:1)

从比较字符串(%2.0%)来看,您正在尝试对版本字符串进行部分匹配。但是,您使用的运算符用于 exact 匹配。更不用说您的第一个代码段根本无法使用,因为您从未真正执行过定义的命令字符串。

WQL query中的filter子句从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