Назад | Перейти на главную страницу

Как заставить Windows забыть о том, что на ней установлен антивирус?

Мы приобрели сетевое и программное решение для соответствия 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 параметр.