我们购买了符合 PCI 标准的网络和软件解决方案:TrustWave。我们开始安装防病毒软件,但发现安装该软件的机器不需要它,因此想安装其他解决方案。
该计划的出席卸载工作正常。无人值守安装不太干净。虽然它支持静默切换,但很多东西都遗留了下来。我已经编写了大部分脚本,但有一部分我遇到了问题:Windows 仍然将该软件视为已安装的防病毒产品。看看如何确认这一点来自 WMI
Get-WmiObject -Namespace root\SecurityCenter2 -Class AntiVirusProduct
我很难找到如何清除这些信息。搜索只能让我找到安装或删除整个防病毒产品的解决方案,而这已经完成了。
有没有办法专门写入此命名空间(或等效注册表),以便 Windows 忘记已安装?我意识到这个请求可能被视为恶意的。
安装其他防病毒软件很可能会解决此问题,但有些机器无需安装该软件即可运行,因此这些信息仍然有用。
答案1
从未测试过,但它将是像这样的脚本:
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
。