#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