Compruebe el estado del antivirus en C #

Necesito verificar un grupo de servidores para ver si el antivirus está actualizado y en ejecución. Lo delicado es que están distribuidos en los servidores de Windows 2003 y 2008 y necesito poder verificarlos todos.

¿Hay alguna forma de hacer esto con C # o VB.NET?

He examinado brevemente el uso de WMI, pero aparece en las computadoras 2008 / win7. Microsoft ha cambiado la información que te devuelven.

En resumen, necesito lo siguiente:

  • Nombre AV
  • Versión AV
  • AV actualizado
  • AV habilitado / en ejecución

¿Alguien puede ayudar?

La muestra se puede encontrar aquí usando WMI como usted mencionó. El cartel dice que esto se está haciendo en una máquina Win 7; por lo que el código de abajo debería comenzar …

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"]); } } 

Dependiendo de cómo esté configurado su entorno, es posible que deba especificar su seguridad y permisos. También debe tener en cuenta que algunos productos antivirus (como McAfee) no hacen que los datos estén disponibles a través de WMI .

Puede consultar la información del Antivirus desde WMI usando este fragmento de código:

 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]`); }