vbscript至查询名称空间值,如果%运行x.bat



我正在尝试vbscript一个过程以检查PC上的TPM名称空间(因为我相信它是批处理文件是不可能的),如果它是2.0版,请返回"是的"回声提示,但到目前为止,即使我知道正确的结果是正确的(2.0,0,1.16),它似乎仅返回一个错误值。

如果我可以将" TPM Specversion"在我的If语句中,我最终将在PXE构建过程中运行降级实用程序,但我现在只是在使用Echo,因此我可以识别TPM版本的识别出去。

这是我到目前为止砍进的东西(dev2.vbs):

Dim strTPM
strTPM = "wmic /namespace:\rootcimv2securitymicrosofttpm path win32_tpm get SpecVersion"
If strTPM = "%2.0%" Then
    WScript.Echo "YES"
Else
    WScript.Echo "Nup"
End If

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

我尝试了一些在线参考活动服务的vbScripts的替代语法,包括以下内容,但它们都错误,甚至不会产生错误的回声结果。

strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "rootcimv2")
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。

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

将WQL查询中的过滤子句从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

另外从查询中删除过滤器子句,并与循环中的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

相关内容

  • 没有找到相关文章

最新更新