Мы приобрели сетевое и программное решение для соответствия PCI: TrustWave. Мы начали установку антивируса, но поняли, что он не нужен на машинах, на которые он устанавливался, и захотели установить другое решение.
Программа присутствовал удаление работает нормально. Это автоматическая установка, которая не очень чиста. Хотя он поддерживает бесшумный переключатель, многое осталось позади. Я написал большую часть этого сценария, но есть одна часть, с которой у меня возникают проблемы: Windows по-прежнему видит программное обеспечение как установленное как антивирусный продукт. Глядя на то, как подтвердить это из WMI
Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct
Мне сложно понять, как стереть эту информацию. Поиск просто приводит меня к решению об установке или удалении всего антивирусного продукта, которое уже было сделано.
Есть ли способ записи в это пространство имен (или эквивалентный реестр) специально, чтобы Windows забыла, что это было установлено? Я понимаю, что этот запрос можно рассматривать как злонамеренный.
Установка другого антивируса, скорее всего, решит эту проблему, но некоторые машины будут работать без них, поэтому эта информация все равно будет полезна.
Никогда не тестировал, но это будет такой сценарий:
On Error Resume Next
Set shell = CreateObject("WScript.Shell")
Set getOSVersion = shell.exec("%comspec% /c ver")
version = getOSVersion.stdout.readall
Select Case True
Case InStr(version, "n 5.") > 1 : GetOS = 0 'pre vista
Case InStr(version, "n 6.") > 1 : GetOS = 1 'vista/post vista
Case Else : GetOS = -1
End Select
strComputer = "."
If GetOS = 0 Then
Set oWMI = GetObject( _
"winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\SecurityCenter")
Set colItems = oWMI.ExecQuery("Select * from AntiVirusProduct")
For Each objItem In colItems
objItem.Delete_
Next
End If
If GetOS = 1 Then
Set oWMI = GetObject( _
"winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\SecurityCenter2")
Set colItems = oWMI.ExecQuery("Select * from AntiVirusProduct")
For Each objItem In colItems
objItem.Delete_
Next
End If
Код из Вот
Я думаю, это сработает, поскольку другой пример кода следует тому же формату, как показано Вот но без пункта удаления в нем.
Эквивалент PowerShell будет
Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct | ForEach-Object{$_.Delete()}
Это также можно было запустить удаленно с помощью -Computer
параметр.