0

Windows 7 または 8 の Windows Security Center 2 から AntiVirus のステータスを取得しようとしています。「objAntiVirusProduct.displayName」からデータを取得して情報を表示することはできますが、Hex を正しく機能させることができないようです。 . これが私が今持っているものです。

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)
4

1 に答える 1

0

私の問題が何であるかを調べてください。私は本質的に、タスクを達成するために必要な作業量を2倍にしていました. 私がしたことは、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
于 2014-06-19T19:40:41.317 に答える