检查VBScript中的十六进制值

检查VBScript中的十六进制值,vbscript,hex,securitycenter,Vbscript,Hex,Securitycenter,我正在尝试从Windows 7或8中的Windows安全中心2获取防病毒状态。我可以从“objAntiVirusProduct.displayName”中提取数据并显示信息,但是我似乎无法使十六进制正确工作。这是我现在拥有的 Dim objWMIServiceAV,objAntiVirusProduct,colFiles,colItems,itemFile,AvStatus,PathToSignedProductExe Dim strdisplayName,strproductState,str

我正在尝试从Windows 7或8中的Windows安全中心2获取防病毒状态。我可以从“objAntiVirusProduct.displayName”中提取数据并显示信息,但是我似乎无法使十六进制正确工作。这是我现在拥有的

Dim objWMIServiceAV,objAntiVirusProduct,colFiles,colItems,itemFile,AvStatus,PathToSignedProductExe
Dim strdisplayName,strproductState,strdefinitionState

Set objWMIServiceAV = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\SecurityCenter2") 
Set colItems = objWMIServiceAV.ExecQuery("Select * from AntiVirusProduct")
For Each objAntiVirusProduct In colItems 
    Set colFiles = objWMIServiceAV.ExecQuery ("Select * from CIM_Datafile Where name = '" & PathToSignedProductExe & "'",,48) 
    For Each itemFile In colFiles
        strdisplayName = (objAntiVirusProduct.displayName)  
        AvStatus = Hex(objAntiVirusProduct.ProductState)
        If Mid(AvStatus, 2, 2) = "10" Or Mid(AvStatus, 2, 2) = "11" Then
            strproductState = "Scanning Enabled"
        ElseIf Mid(AvStatus, 2, 2) = "00" Or Mid(AvStatus, 2, 2) = "01" Then
            strproductState = "Scanning Not Enabled" 
            errors("AntiVirus Product State: ") = "Off"
        End If

        If Mid(AvStatus, 4, 2) = "00" Then
            strdefinitionState = "AntiVirus up-to-date"
        ElseIf Mid(AvStatus, 4, 2) = "10" Then
            strdefinitionState = "AntiVirus outdated"
        End If

        objFile.Write "AntiVirus Display Name= " & strdisplayName & vbNewLine
        objFile.Write "AntiVirus Scanning Status= " & strproductState & vbNewLine
        objFile.Write "AntiVirus Definition Status= " & strdefinitionState & vbNewLine
    Next 
Next 
我错过了什么

编辑:我被要求提供一些输出示例

我收到的是:

AntiVirus Display Name= Norton Endpoint Protection
AntiVirus Scanning Status= 
AntiVirus Definition Status= 
我期待的是:

AntiVirus Display Name= Norton Endpoint Protection
AntiVirus Scanning Status= (SCANNING STATUS)
AntiVirus Definition Status= (AV UPDATE STATUS)

找出我的问题所在,我基本上是将完成任务所需的工作量加倍。我所做的是,我删除了第8行和第9行,这使一切正常工作。我还检查并删除了不再需要的变量,并对它们进行了更多的修饰

我完成的代码如下所示:

Dim objWMIServiceAV,objAntiVirusProduct,colItems
Dim strdisplayName,AvStatus,strproductState,strdefinitionState

Set objWMIServiceAV = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\SecurityCenter2") 
Set colItems = objWMIServiceAV.ExecQuery("Select * from AntiVirusProduct")
For Each objAntiVirusProduct In colItems 
    strdisplayName = (objAntiVirusProduct.displayName)  
    AvStatus = Hex(objAntiVirusProduct.ProductState)
    If Mid(AvStatus, 2, 2) = "10" Or Mid(AvStatus, 2, 2) = "11" Then
        strproductState = "Scanning Enabled"
    ElseIf Mid(AvStatus, 2, 2) = "00" Or Mid(AvStatus, 2, 2) = "01" Then
        strproductState = "Scanning Not Enabled"
    End If

    If Mid(AvStatus, 4, 2) = "00" Then
        strdefinitionState = "AntiVirus up-to-date"
    ElseIf Mid(AvStatus, 4, 2) = "10" Then
        strdefinitionState = "AntiVirus outdated"
    End If

    objFile.Write "AntiVirus Display Name= " & strdisplayName & vbNewLine
    objFile.Write "AntiVirus Scanning Status= " & strproductState & vbNewLine
    objFile.Write "AntiVirus Definition Status= " & strdefinitionState & vbNewLine
Next

请给出实际输出和期望输出的示例。最好的做法是将代码精简到一个仍然能够演示问题的最小示例。“objAntiVirusProduct.ProductState”输出一个数字,我试图读取该数字的特定值。我的问题是,无论出于何种原因,我都无法获得“扫描状态”或“定义状态”的任何类型的输出。看起来十六进制字符3到6与您正在检查的模式不匹配。在行
AvStatus=Hex(objAntiVirusProduct.ProductState)
之后添加一行
WScript.Echo AvStatus
。你得到了什么价值?