Windows

如何讓 Windows 忘記它已安裝防病毒軟體?

  • July 5, 2016

我們購買了用於 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參數遠端執行。

引用自:https://serverfault.com/questions/787994