0

Windows マシンで実行されているウイルス対策ソリューションがあるかどうかを検出するスクリプトに取り組んでいます。Windows 8で実行している場合、サードパーティのウイルス対策ソリューションを実行すると、無効になっている Windows Defender が常に存在するため、ウイルス対策が無効になっているという誤検知が発生します。

サードパーティのウイルス対策ソフトウェアの productState が有効であり、正しく報告されていることを確認できますが、私のスクリプトは Windows Defender エントリのみをプルしています。

Windows Defender のエントリを保持する必要がありますが、Windows Defender に関心があるのは、他のウイルス対策ソフトウェアがインストールされていない場合のみです。コマンド プロンプトから次のコマンドを実行してデータを取得すると、2 つの別個のエントリが表示されます。

WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get /Format:List

サードパーティのウイルス対策ソフトウェアがインストールされている場合のみ取得し、それ以外の場合は Windows Defender の情報を保持したいと考えています。

これを行う方法は、instanceGUID を呼び出して Windows Defender GUID と比較することですが、いくつかの誤検知が発生しています。このデータを正しく解析し、理想的にはサードパーティの情報のみを確認する方法はありますか?

私が見ているものを正確に示すために完全なスクリプトを含めています。必要に応じて省略できます。

Set objWMIServiceSC = GetObject("winmgmts:\\.\root\SecurityCenter2")
Set colAVItems = objWMIServiceSC.ExecQuery("Select * from AntiVirusProduct")
For Each objAntiVirusProduct In colAVItems
    strinstanceGuid = (objAntiVirusProduct.instanceGuid)
    strWinDefGUID = "{D68DDC3A-831F-4fae-9E44-DA132C1ACF46}"
    If strinstanceGuid <> strWinDefGUID Then
        AvStatus = Hex(objAntiVirusProduct.ProductState)
        If (objAntiVirusProduct.ProductState = "393472" _
            OR Mid(AvStatus, 2, 2) = "10" Or Mid(AvStatus, 2, 2) = "11" _
            OR Mid(AvStatus, 5, 2) = "10" Or Mid(AvStatus, 5, 2) = "11") Then
                strproductState = "ENABLED"
        Else
            strproductState = "DISABLED"
        End If
    Else
        If Mid(AvStatus, 2, 2) = "10" Or Mid(AvStatus, 2, 2) = "11" _
            OR Mid(AvStatus, 5, 2) = "10" Or Mid(AvStatus, 5, 2) = "11" Then
                strproductState = "ENABLED"
        Else
            strproductState = "DISABLED"
        End If
    End If
    If Mid(AvStatus, 4, 2) = "00" Then
        strdefinitionState = "CURRENT"
    ElseIf Mid(AvStatus, 4, 2) = "10" Then
        strdefinitionState = "OUTDATED"
    End If
Next

繰り返しますが、これはWindows 8の問題です。

4

2 に答える 2