WMI. Fuente inagotable de información

La definición de Microsoft de WMI es la que sigue. Instrumental de administración de Windows (WMI) es un componente del sistema operativo Windows que permite obtener acceso mediante programación a información de administración en un entorno empresarial. WMI en .NET Framework se basa en la tecnología WMI original y permite el mismo desarrollo de aplicaciones y proveedores, además de las ventajas que ofrece la programación en .NET Framework.
En mi opinión, WMI es espectacular. Cualquier información que queráis obtener de cualquier sistema windows, WMI la proporciona, desde el nombre del sistema operativo de una máquina, pasando por la memoria ram que tiene, las tarjetas de red, configuración de cualquier cosa del sistema, performance, servicios, tareas, services packs instalados, software instalado, etc. etc. etc….

La arquitectura de WMI consta de los niveles siguientes:

  • Los componentes de software cliente realizan operaciones mediante WMI, como leer detalles de administración, configurar sistemas y realizar suscripciones a eventos.
  • El administrador de objetos es un intermediario entre los proveedores y los clientes que proporciona ciertos servicios esenciales, como la publicación y suscripción estándar de eventos, el filtrado de eventos, motor de consultas y otros servicios.
  • Los componentes de software de proveedor capturan y devuelven datos activos a las aplicaciones cliente, procesan llamadas a métodos procedentes de los clientes y vinculan al cliente con la infraestructura que se está administrando.

A continuación muestro un pequeño ejemplo de cómo recuperar información con WMI y mostrarla en un treeview. Lo único extraño que pueden ver en el código es que no utilizo el TreeView que viene con Visual Studio sino uno de otro fabricante, simplemente lo he utilizado porque el de VS no permite retornos de carros, de resto todo normal. Simplemente recupero alguna información como nombre de máquina, microprocesador, video y discos. Pero ya digo, cualquier información del sistema se puede recuperar.

Código:

Public Class WMI

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
‘ RECOPILACION DE DATOS
Me.InformacionGeneral()
Me.Micro()
Me.Video()
Me.Discos()
Me.UltraTree1.ExpandAll()
End Sub
Private Sub InformacionGeneral()
‘ INFORMACION GENERAL

Try
Dim searcher As New ManagementObjectSearcher( _
“root\CIMV2”, _
“SELECT * FROM Win32_ComputerSystem”)

For Each queryObj As ManagementObject In searcher.Get()
Dim _Node As New Infragistics.Win.UltraWinTree.UltraTreeNode
_Node.Text = “Nombre PC:” & queryObj(“Name”).ToString & ControlChars.CrLf & _
“Fabricante:” & queryObj(“Manufacturer”).ToString & ControlChars.CrLf & _
“Modelo: ” & queryObj(“Model”).ToString & ControlChars.CrLf & _
“Tipo: ” & queryObj(“SystemType”).ToString & ControlChars.CrLf & _
“Memoria: ” & queryObj(“TotalPhysicalMemory”).ToString

Me.UltraTree1.Nodes(0).Nodes.Add(_Node)
Next
Catch err As ManagementException
MessageBox.Show(“Error recuperando información WMI: ” & err.Message)
End Try
End Sub
Private Sub Micro()
‘ MICROPROCESADOR
Try
Dim searcher As New ManagementObjectSearcher( _
“root\CIMV2”, _
“SELECT * FROM Win32_Processor”)

Dim _Cantidad As Byte
Dim _Node As New Infragistics.Win.UltraWinTree.UltraTreeNode

For Each queryObj As ManagementObject In searcher.Get()

_Node.Text = “Modelo:” & queryObj(“Name”).ToString & ControlChars.CrLf & _
“Velocidad:” & queryObj(“CurrentClockSpeed”).ToString & ” Mhz.” & ControlChars.CrLf
_Cantidad = +1
Next

_Node.Text = _Node.Text & “Cantidad: ” & _Cantidad.ToString
Me.UltraTree1.Nodes(1).Nodes.Add(_Node)

Catch err As ManagementException
MessageBox.Show(“Error recuperando información WMI: ” & err.Message)
End Try
End Sub

Private Sub Video()
‘ VIDEO
Try
Dim searcher As New ManagementObjectSearcher( _
“root\CIMV2”, _
“SELECT * FROM Win32_DisplayConfiguration”)

Dim _Node As New Infragistics.Win.UltraWinTree.UltraTreeNode

For Each queryObj As ManagementObject In searcher.Get()

_Node.Text = “Modelo:” & queryObj(“Caption”).ToString & ControlChars.CrLf & _
“Frecuencia:” & queryObj(“DisplayFrequency”).ToString & ControlChars.CrLf

Next

Me.UltraTree1.Nodes(2).Nodes.Add(_Node)

Catch err As ManagementException
MessageBox.Show(“Error recuperando información WMI: ” & err.Message)
End Try
End Sub
Private Sub Discos()
‘ DISCOS
Try
Dim searcher As New ManagementObjectSearcher( _
“root\CIMV2”, _
“SELECT * FROM Win32_DiskDrive”)

Dim _Node As New Infragistics.Win.UltraWinTree.UltraTreeNode

For Each queryObj As ManagementObject In searcher.Get()

_Node.Text = _Node.Text & “Nombre: ” & queryObj(“Caption”).ToString & ControlChars.CrLf & _
“Tipo:” & queryObj(“InterfaceType”).ToString & ControlChars.CrLf & _
“Particiones:” & queryObj(“Partitions”).ToString & ControlChars.CrLf

Next

Me.UltraTree1.Nodes(3).Nodes.Add(_Node)

Catch err As ManagementException
MessageBox.Show(“Error recuperando información WMI: ” & err.Message)
Catch err As Exception
End Try
End Sub
End Class

Si se fijan, lo único que hay que hacer es una query sobre la clase WMI que se quiere consultar. Y ahora se preguntarán, ¿como sabré qué clase es la que debo consultar para lo que yo quiero hacer? No hay problema, aparte de la documentación de MSDN Microsoft nos proporciona una herramienta que pueden bajarse aquí y que incluye todas las clases y objetos de WMI. Y no sólo eso sino además genera código VBScript, VB.Net y C# listo para usar.

Realmente creo que WMI es fantástico, yo, para controlar el hardware y software instalado en mi empresa, he desarrollado un servicio que se instala en las máquinas y que alimenta una base de datos informando de todo aquello que me interesa saber de mi parque informático. Ahora no tengo que ir máquina a máquina para saber que memoria tiene o por ejemplo saber cuan viejo es mi parque partiendo de los micros instalados. Antes lo llevaba en papel y relamente era inoperante.

Espero que les sirva.

Anuncios

5 Responses to “WMI. Fuente inagotable de información”


  1. 1 Ariel Negrete abril 30, 2007 en 4:30 pm

    Me ha sido de gran utilidad este componente del sistema operativo para recopilar informacion. Me gustaria saber de que manera puedo aplicarlo para adquirir la informacion de los equipos de mi red

    Agradesco de antemano su colaboracion

    Atentamente ,

    Ariel Negrete Ruiz

  2. 2 Federico Luna junio 12, 2008 en 8:29 pm

    Tengo este código que funciona bien:

    Private sub HdInfo()
    Dim wmiSQL As String
    wmiSQL = “Win32_DiskDrive.DeviceID=’\\.\PHYSICALDRIVE0′”

    Dim wmi_HD As New ManagementObject(wmiSQL)
    wmi_HD.get

    End Sub

    Con este otro código obtengo un error de ruta no encontrada.

    Private sub HdInfo()
    Dim wmiSQL As String
    wmiSQL = “Win32_DiskDrive.Index=0”

    Dim wmi_HD As New ManagementObject(wmiSQL)
    wmi_HD.get

    End Sub

    Haciéndolo con un searcher filtrando por la propiedad Index también funciona correctamente:

    Private sub HdInfo()
    Dim wmiSQL As String
    wmiSQL = “SELECT * FROM Win32_DiskDrive WHERE Index = 0”

    Dim BuscadorWMI As New ManagementObjectSearcher(wmiSQL)
    For Each wmi_HD As ManagementObject In BuscadorWMI.Get

    Next
    End Sub

    Ya sólo por no quedarme con la duda, quisiera saber porque el segundo código me da error.

    Gracias.

  3. 3 Raul Rico julio 23, 2008 en 7:33 pm

    Tenemos un problema y es que no podemos comunicarnos remotamente con otra maquina para ver sus datos,existe alguna otra configuracion ademas del firewall y el dcom/135 en las maquinas, ya que nos indica acceso denegado identificacion no valida. Deben de estar las maquinas en un grupo de trabajo o dominio común?
    Gracias por sus comentarios

  4. 4 Willam Ulloa febrero 11, 2010 en 4:44 pm

    Que se llama el componente q utilizaste en lugar de treeview y de donde se puede descargar…

    gracias.

  5. 5 mebelio@maz.es abril 28, 2011 en 8:04 am

    Buenos días,

    Soy Mª Eugenia. Programo para la empresa Maz.

    Mi proyecto es realizar una aplicación Web con c# y wmi para realizar un inventario informático de la red de Maz.
    Tenemos Ocs Inventory pero mi jefe por carencias de algunas cosas, quiere hacer el proyecto con las herramientas arriba indicadas que además son con las que se programa aquí. Y así está todo programado con la misma tecnología.

    Carencias que hasta ahora no he podido suplir con wmi y de la que quiero ayuda.

    – Sacar los fabricantes, marcas y modelos del ordenador y monitor. Los nombres que dan son genéricos, o por lo menos yo no sé sacar los buenos.

    – Sacar si hay uno o más monitores conectados. De momento no he conseguido que me diga cuando hay más de un monitor conectado que lo hay.

    – Sacar los números de serie de las impresoras y monitores conectados. Creo que es complicado sacarlos.

    De todos modos si esto no lo llegásemos a sacar, con mi jefe, hemos pensado en que los empleados una vez al año rellenen en la aplicación, esta información a través de una pantalla.

    Estas son las cosas que me traen loca desde hace tiempo.

    ¿Me podrías ayudar?

    Te lo agradeceré enormemente.

    Mª Eugenia Belío.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s




diciembre 2006
L M X J V S D
« Nov    
 123
45678910
11121314151617
18192021222324
25262728293031

Sindicación

NetMania y la Web

Internet Blog Serial Number 01-10-2006-02

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons


Otros


Añadir a Favoritos de Technorati

Añadir a Netvibes

Añadir a Google

Unión de Bloggers Hispanos

nubes

Anuncios

A %d blogueros les gusta esto: