2014-06-18 107 views
0

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

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) 
+0

请给实际与期望输出的一个例子。将代码修剪为一个仍能证明问题的最小示例也是一种很好的做法。我在输出中添加了 –

+0

。 “objAntiVirusProduct.ProductState”输出一个数字,我试图读取该数字的特定值。我的问题是,无论出于何种原因,我没有为“扫描状态”或“定义状态”获取任何类型的输出。 – Mojoscream

+0

看起来像十六进制字符3到6与您正在检查的模式不匹配。在行'AvStatus = Hex(objAntiVirusProduct.ProductState)'后面添加一行'WScript.Echo AvStatus'。你有什么价值? –

回答

0

找出我的问题是,我基本上增加了一倍所需的工作量完成任务。我做的是我删除了行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