如何确定是否安装了防病毒产品?

我们有超过15000台机器的大型安装。 他们应该有一个趋势科技安装的版本; 然而,我们并不知道这一点。

这些都是包含各种SP级别的XP,Vista RTM和SP1以及多个2000和2003服务器的Windows盒子。

我如何确定:

  1. 是否安装了AV产品?
  2. 什么版本的产品安装?
  3. 该模式文件的什么版本是在盒子上?

想法?

谢谢,

由于您正在谈论15,000台主机,因此从networking中查询每台主机将会非常低效。

“正确的事情”然后是在每台主机上运行一个看门狗,以确保安装并运行相应的软件。 这个看门狗可能是一个作为服务运行的软件,一个预定的脚本,甚至是基于硬件的,如果你使用类似Intel vPro的东西。

要validation是否安装了AV软件,可以使用以下PowerShell命令 –

$avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" ` -computername "." -filter "Name like '%antivirus%'" 

请注意,最后您可以自定义一个filter参数,以确保您正在查看正确的产品。

like操作符玩了一下之后,你应该能够在这里和那里指定防病毒描述和小的变化。 请注意,我上面的示例(任何包含单词“antivirus”)是非常简单的。 您应该改为查找与您认可的防病毒软件相匹配的特定模式(例如“趋势科技防病毒%”)

无论如何,上面的命令将返回一个与您的filter声明相匹配的已安装产品的集合。 从这里你可以testing$avSoftware.Count是否大于零,在这种情况下,你已经安装了防病毒软件。 下面的例子列出了所有安装的防病毒软件 –

 if ($avSoftware.Count -gt 0) { foreach ($av in $avSoftware) { write-host $p.Name } } else { write-host "No AV software found" } 

而不是只是打印一条消息,说没有findAV,你应该做一些更有用的东西,例如

  • 通知pipe理员
  • 从networking安装一个AV

你也说你想获得安装的AV版本。 为此,可以使用Win32_ProcessVersion属性。 让我们修改上面的代码,也打印已安装软件的版本号 –

 $avSoftware = get-wmiobject -class "Win32_Product" -namespace "root\cimv2" ` -computername "." -filter "Name like '%antivirus%'" foreach ($av in $avSoftware) { write-host $av.Name, $av.Version } 

至于已安装的病毒定义文件的版本,则必须依赖每个特定的AV WMI接口。 你将不得不咨询供应商的文档。

还有一件事要记住。 如果AV未运行,则可能不足以知道主机已经安装了AV。 在检查安装了哪个AV后,应确保其进程正在运行。 要做到这一点,您必须知道每个AV软件的适当过程是什么,然后像这样寻找它们 –

 $processes = get-wmiobject -class "Win32_Process" -namespace "root\cimv2" ` -computername "." -filter "Name = 'TeaTimer.exe'" if ($processes.Count -gt 0) { foreach ($p in $processes) { write-host $p.Name } else { # AV not running. Launch it here or notify someone } 

上面的例子查找Spybot进程(不完全是AV,但你得到的图片),这被称为“TeaTimer.exe”。 修改它来寻找你的过程。

现在,所有这些说,如果你正在处理这样的数以千计的主机,你可能应该投资一些pipe理工具(如LANdesk,微软系统中心或水平平台)。这些工具将使您的生活变得更加容易。

既然你提到趋势科技,我们使用趋势,这就是我们所做的。 计划任务会对系统进行全面扫描,并将结果放入文本文件中。 实际上,这是一个以date为文件名的日志文件,例如C:\ TRENDMICRO文件夹中的20090517.log。 因为这只是扫描的结果,它是一个小文件。

在我们的情况下,大约有100台计算机,服务器上的powershell脚本很容易遍历所有计算机,并将这些文件连接起来,只查找没有string“Virus found count(0) “ 在他们中。 很明显,如果那个文件和短语不在那里,那就是错误的:最近AV没有运行,find了病毒,没有安装AV等等。你可能需要更多的东西来扩展它。

但是,有没有企业版本的AV,而不是我的可怜人的版本呢?

Knox针对企业版本+1。 我同意。 趋势的企业桌面解决scheme有一个服务器部分,跟踪客户端,以及他们目前有哪些扫描引擎和模式。 它也可以让你部署。 我会用这个来实现你的目标。 使用此部署重新安装防毒墙networking版。 我甚至不用费力地在这个游戏中部署脚本来确定你在哪里。 最好刚刚开始。 如果你还没有企业工具(这真的让我感到吃惊),请与趋势合作。 如果你不这样做,那么有人需要考虑糟糕的购买决定。

在当前版本的Windows(xp sp3 +,vista,win 7)中,您可以查询与Windows安全中心使用的相同的WMI提供程序,以了解是否安装了防病毒产品并且是最新的。

这是一个例子:

 Set objSWbemServices = GetObject("winmgmts:\\.\root\SecurityCenter") Set colFirewall = objSWbemServices.ExecQuery("Select * From antivirusProduct",,48) For Each objAntiVirusProduct In colFirewall WScript.Echo "companyName: " & objAntiVirusProduct.companyName WScript.Echo "displayName: " & objAntiVirusProduct.displayName WScript.Echo "instanceGuid: " & objAntiVirusProduct.instanceGuid WScript.Echo "onAccessScanningEnabled: " & objAntiVirusProduct.onAccessScanningEnabled WScript.Echo "productUptoDate: " & objAntiVirusProduct.productUptoDate WScript.Echo "versionNumber: " & objAntiVirusProduct.versionNumber Next 

也就是说,并不是所有的防病毒产品都会注册一个WMI提供者,但是我怀疑大多数stream行的提供者会这样做。 此外,还不清楚这是否由微软正式支持,所以它可能会在未来的版本中消失。

您可以在这里结合其他WMIbuild议尝试它,如果这不起作用,则可以重新扫描已安装的产品。

我会做一个login脚本检查各种registry项或文件,以确定是否安装了一个产品。 然后该脚本可以创build一个机器的日志,不pipe。

 Dim WSHShell,strRegKey Set WSHShell = WScript.CreateObject("WScript.Shell") strRegKey="HKLM\Software\Symantec\Version" WSHShell.RegRead(strRegKey) Wscript.quit(0) 

不知道这是多么实际,给予15,000主机,但如果你有一个你想检查的文本文件的机器列表,你可以查询registry中的卸载键,并parsing结果。

以每行计算机名称命名computers.txt的文本文件:

 COMPUTER1 COMPUTER2 

示例名为batch.bat:

 @echo off for /F %%i in (computers.txt) do call :SUB %%i GOTO :EOF :SUB echo %1 reg query "\\%1\HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall" /s 

我意识到这可能是文本中的一些信息超载,但它允许您parsing您正在查找的任何A / V软件的结果,而不知道每个产品的卸载信息所包含的registry项。

您还可以为特定的产品registry条目定制此操作,将registry查询replace为特定产品的registry项。

依次回答你的问题

  1. 和2。

我会写一个脚本在每个系统上运行。 您将查询卸载registry项。 你必须查看每个子项。 在这种情况下使用WMI是最好的方法。 在那个键里,你会看到产品的名称和版本。 看到这个例子的脚本。

3。

我会做试验和错误,但在趋势的情况下,我想他们会把他们的定义版本在registryHKEY_LOCAL_MACHINE \ Software \ TrendMicro或在其本地目录中的configuration或ini文件。

这只会占AV软件的版本。 你将不得不为多个版本做到这一点。