El trastero de José Juan Valid XHTML 1.1 Valid CSS! Estilo de página alternativo
Artículo creado en 2009.

Windows Management Instrumentation I

Administración de sistemas

Aunque suelo observar con curiosidad toda la información que me llega al respecto, la administración de sistemas no es una de las áreas por las que tenga simpatía. Quizás sea porque los problemas que se plantean y resuelven son motivados y enfocados (generalmente) desde un punto de vista completamente corporativista, en el sentido de que dichos problemas y soluciones sólo sirven para cada caso concreto. Por ejemplo, conocer en profundidad la administración de sistemas en plataformas Windows practicamente no sirve para nada al administrador de otras plataformas como Unix o Mac. Por supuesto se aprenden y existen cosas comunes puesto que forzosamente deben compartir estándares (TCP, HTML, UNICODE, etc...) y también implementan estrategias similares (grupos de usuarios, perfiles, estructura de archivos, etc...) pero, siendo estrictos, saber que en Windows existe la clave de registro HKEY_LOCAL_MACHINE de poco o nada sirve en otros sistemas y saber ese tipo de cosas ocupa un amplio porcentaje del saber de un buen administrador de sistemas.

Windows Management Instrumentation

Afortunadamente, de vez en cuando se ven buenas ideas más o menos (nada es perfecto) estandarizadas que solucionan de una forma fabulosa problemas aparentemente difíciles, en este caso, normalizar y poner a disposición de todo el mundo la ingente cantidad de información que almacena un sistema informático (sí, en el sentido mas amplio de la palabra).

Windows Management Instrumentation (WMI) es la implementación de Microsoft de los estándares Web Based Enterprise Management (WBEM) y Common Information Model (CIM) emitidos por la Distributed Management Task Force (DMTF).

Trivializando el acceso mediante C#

Acceder a la información disponible en WMI no es nada difícil aunque puede hacerse algo pesado si el número de estructuras y propiedades a las que queremos acceder es elevado, más que nada, que todas ellas estarán contenidas como datos en estructuras abstractas y no serán accesibles directamente.

Existe una buena forma de acceder a esa información desde .NET y es creando un wrapper mediante la herramientas mgmtclassgen.exe.

Explorando WMI

WMI es bastísimo, todo lo que podamos imaginar de un sistema informático (Windows) está ahí. Cualquier información sobre discos, procesadores, memoria, USB, red, usuarios, procesos, etc... la encontraremos ahí. Por eso, lo primero que deberemos hacer es saber dónde esta lo que queremos buscar. Para ello, qué mejor que dirigirse al SDK de Microsoft.

Construyendo el wrapper

Construirnos una clase que contenga todos los miembros del elemento del que estamos interesados es muy fácil:

C:\...\tu-proyecto>mgmtclassgen.exe Win32_NetworkAdapter /l CS /p WMI_Win32_NetworkAdapter.cs

Usando el wrapper

En el ejemplo anterior, se ha generado una clase para el tipo de objeto ManagementObject y para que "cargue" un objeto desde dicho tipo (puesto que no son de tipos "compatibles") una opción muy cómoda es pasarselo al constructor, por ejemplo:

...
	ManagementObjectSearcher m = new ManagementObjectSearcher( @"
		SELECT	*
		FROM	Win32_NetworkAdapter
	" );

	foreach( ManagementObject o in m.Get() ) {

		Networkadapter a = new Networkadapter( o );

		...usar 'a', por ejemplo:
		... a.Name ...
		... a.ServiceName ...
		... a.Description ...
		... a.MACAddress ...
		...

	}
...

Cómodo ¿no?.




¿Te ha gustado? ¡aporta tu opinión!
Valoración:
 0    1    2    3    4    5    6    7    8    9    10

Comentario:
NOTA: si es una petición... ¡pon el e-mail al que responderte o no sabré a dónde escribir!

Código de verificación captcha