Проверьте статус антивируса в C # - PullRequest
3 голосов
/ 20 января 2011

Мне нужно проверить группу серверов, чтобы убедиться, что антивирус обновлен и работает.Хитрость в том, что они распространены на серверах Windows 2003 и 2008, и мне нужно иметь возможность проверить их все.

Есть ли способ сделать это с C # или VB.NET?

Я кратко осмотрелся с помощью WMI, но, похоже, на компьютерах 2008 / win7 Microsoft изменила информацию, которую они вам возвращают.

Итак, мне нужно следующее:

  • Имя AV
  • Версия AV
  • Обновление AV
  • Включение / запуск AV

Может кто-нибудь помочь

Ответы [ 2 ]

3 голосов
/ 20 января 2011

В зависимости от того, как настроена ваша среда, вам может потребоваться указать параметры безопасности и разрешения. Следует также отметить, что некоторые антивирусные продукты (например, 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]`);
}
3 голосов
/ 20 января 2011

Образец можно найти здесь с использованием 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"]);
    }
}
...