Проверка шестнадцатеричных значений в VBScript

#vbscript #hex #securitycenter

#vbscript #шестнадцатеричный #securitycenter

Вопрос:

Я пытаюсь получить статус антивируса из Центра безопасности Windows 2 в Windows 7 или 8. Я могу извлечь данные из «objAntiVirusProduct.DisplayName» и отобразить информацию, однако, похоже, я не могу заставить шестнадцатеричный код работать правильно. Вот что у меня есть прямо сейчас.

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

Set objWMIServiceAV = GetObject("winmgmts:{impersonationLevel=impersonate}!\.rootSecurityCenter2") 
Set colItems = objWMIServiceAV.ExecQuery("Select * from AntiVirusProduct")
For Each objAntiVirusProduct In colItems 
    Set colFiles = objWMIServiceAV.ExecQuery ("Select * from CIM_Datafile Where name = '" amp; PathToSignedProductExe amp; "'",,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= " amp; strdisplayName amp; vbNewLine
        objFile.Write "AntiVirus Scanning Status= " amp; strproductState amp; vbNewLine
        objFile.Write "AntiVirus Definition Status= " amp; strdefinitionState amp; 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)
  

Комментарии:

1. Пожалуйста, приведите пример фактического и желаемого результата. Также было бы хорошей практикой сократить ваш код до минимального примера, который все еще демонстрирует проблему.

2. Я добавил в свой вывод. «objAntiVirusProduct. ProductState» выводит число, и я пытаюсь прочитать конкретные значения этого числа. Моя проблема в том, что по какой-либо причине я не получаю никаких выходных данных ни для «Статуса сканирования», ни для «Статуса определения».

3. Похоже, шестнадцатеричные символы с 3 по 6 не соответствуют шаблонам, которые вы проверяете. Добавьте строку WScript.Echo AvStatus после строки AvStatus = Hex(objAntiVirusProduct.ProductState) . Какое значение вы получаете?

Ответ №1:

Выясните, в чем была моя проблема, я, по сути, удвоил объем работы, необходимый для выполнения задачи. Что я сделал, так это удалил строки 8 и 9, благодаря чему все заработало правильно. Я также просмотрел и удалил переменные, которые больше не были нужны, и немного приукрасил ситуацию.

Мой готовый код выглядит так:

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

Set objWMIServiceAV = GetObject("winmgmts:{impersonationLevel=impersonate}!\.rootSecurityCenter2") 
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= " amp; strdisplayName amp; vbNewLine
    objFile.Write "AntiVirus Scanning Status= " amp; strproductState amp; vbNewLine
    objFile.Write "AntiVirus Definition Status= " amp; strdefinitionState amp; vbNewLine
Next