Проверка шестнадцатеричных значений в VBScript
Я пытаюсь получить статус Антивируса из Windows Security Center 2 в Windows 7 или 8. Я могу получить данные из "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)
1 ответ
Решение
Чтобы выяснить, в чем заключалась моя проблема, я по сути удвоил объем работы, необходимый для выполнения этой задачи. Я удалил строки 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