VBScript查询命名空间值,如果为%,则运行X.bat

VBScript查询命名空间值,如果为%,则运行X.bat,vbscript,wmi,wmic,tpm,Vbscript,Wmi,Wmic,Tpm,我试图用VBScript编写一个进程来检查PC机上的TPM命名空间,因为我认为它不可能作为批处理文件,如果是2.0版,则返回YES echo提示符,但到目前为止,它似乎只返回一个假值,即使我知道正确的结果为TRUE 2.0、0、1.16 如果我可以将TPM SpecVersion放入我的If语句中,我最终会让脚本在PXE构建期间运行降级实用程序,但我现在只使用echo,这样我就可以确定TPM版本的标识 这就是我到目前为止破解的dev2.vbs: 我知道我可以在命令提示符下运行wmic查询并获得正

我试图用VBScript编写一个进程来检查PC机上的TPM命名空间,因为我认为它不可能作为批处理文件,如果是2.0版,则返回YES echo提示符,但到目前为止,它似乎只返回一个假值,即使我知道正确的结果为TRUE 2.0、0、1.16

如果我可以将TPM SpecVersion放入我的If语句中,我最终会让脚本在PXE构建期间运行降级实用程序,但我现在只使用echo,这样我就可以确定TPM版本的标识

这就是我到目前为止破解的dev2.vbs:

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

我尝试了VBScripts online中引用活动服务的几种可选语法,包括以下语法,但它们都会出错,甚至不会产生错误的回显结果

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。

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

将from SpecVersion='%2.0%'中的filter子句更改为SpecVersion,如'%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

WMI可通过wmic或所有其他COM或.NET语言从命令提示符获得。那么你错了。那么它会返回什么而不是%2.0%?需要对象:“objWMIService”和你的两个建议。@gerendasi我的答案没有提供一个交钥匙解决方案。您需要将其与现有代码集成。把这当作你的家庭作业。
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