在C#中检查防病毒软件状态

3
我需要检查一组服务器,以查看其防病毒软件是否为最新版本并正在运行。棘手的问题是它们分布在Windows 2003和2008服务器上,我需要能够检查它们所有的状态。
有没有使用C#或VB.NET实现这个功能的方法?
我已经简要地使用WMI进行了搜索,但似乎在2008/win7计算机上,Microsoft已更改了他们向您返回的信息。
总之,我需要以下信息:
AV名称 AV版本 AV最新版本 AV启用/运行状态
有人可以帮忙吗?
2个回答

4

您可以在此处找到示例,使用WMI进行检查,正如您所提到的。作者指出这是在Win 7机器上完成的; 因此,下面的代码应该能够帮助您入门...

ConnectionOptions _connectionOptions = new ConnectionOptions();
//Not required while checking it in local machine.
//For remote machines you need to provide the credentials
//options.Username = "";
//options.Password = "";
_connectionOptions.EnablePrivileges = true;
_connectionOptions.Impersonation = ImpersonationLevel.Impersonate;
//Connecting to SecurityCenter2 node for querying security details
ManagementScope _managementScope = new ManagementScope(string.Format("\\\\{0}\\root\\SecurityCenter2", ipAddress), _connectionOptions);
_managementScope.Connect();
//Querying
ObjectQuery _objectQuery = new ObjectQuery("SELECT * FROM AntivirusProduct");
ManagementObjectSearcher _managementObjectSearcher =
    new ManagementObjectSearcher(_managementScope, _objectQuery);
ManagementObjectCollection _managementObjectCollection = _managementObjectSearcher.Get();
if (_managementObjectCollection.Count > 0)
{
    foreach (ManagementObject item in _managementObjectCollection)
    {
        Console.WriteLine(item["displayName"]);
        //For Kaspersky AntiVirus, I am getting a null reference here.
        //Console.WriteLine(item["productUptoDate"]);

        //If the value of ProductState is 266240 or 262144, its an updated one.
        Console.WriteLine(item["productState"]);
    }
}

谢谢您。最初我困惑的是productState。这个答案引导我查看了http://www.neophob.com/2010/03/wmi-query-windows-securitycenter2/,其中提供了更多关于产品状态的信息。我还发现securityCenter2显然是Vista SP1+。 - Stuart Blackler
一个问题,我们可以在Windows 7中获得最新的杀毒软件功能吗?@Aaron McIver - TechBrkTru

3

根据您的环境设置,您可能需要指定安全性和权限。您还应该注意,一些杀毒软件产品(如 McAfee)不通过 WMI 提供数据

您可以使用以下代码片段从 WMI 查询防病毒软件信息:

string computer = Environment.MachineName;  
string wmipath = @"\\" + computer + @"\root\SecurityCenter";  
string query = @"SELECT * FROM AntivirusProduct";

ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmipath, query);  
ManagementObjectCollection results = searcher.Get();

foreach (ManagementObject result in results)  
{  
    // do something with `result[value]`);
}

我在想WHS如何获取客户端机器的信息,以了解您是否安装了杀毒软件...因为McAfee是其中之一;可能是特定于供应商的。 - Aaron McIver
@Arron,我对检测的工作原理感到非常模糊,但是我记得它与 McAfee eOrchestrator 有关。 - Greg Buehler
谢谢你的回答,Greg。看起来在XP/Vista(SP1之前)和NT 2003上都能工作。现在正在进行更多测试。 - Stuart Blackler
1
抱歉,忘了说明不适用于服务器平台(2003-2008),因为它们没有相应的命名空间进行检查。 - Stuart Blackler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接