Uso de WMI desde Vb.NET[Acceso a propiedades a bajo nivel]
Fecha: 15/Ago/2005 (14/08/05)
|
Estimados desarrolladores a continuación describo algunas rutinas y detalles en el mundo de WMI aplicado a .NET
En este artículo veremos la forma de generar clases fuertemente tipadas para manejar objetos de WMI y como usarlas.
La utilidad Mgmtclassgen.exe
Esta utilidad la podéis usar desde el la venta de comandos de Visual Studio y su propósito es generar clases para el uso de los objetos WMI, por ejemplo podríamos generarnos una clase/componente para la interacción con el disco lógico:
"mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l VB /p c:\disk.vb"Esta sentencia generaría una clase en el espacio de nombres ROOT.CIMV2.Win32 llamada LogicalDrives o podríamos cambiar W32_LogicalDisck por Win32_NetworkAdapterConfiguration ó Win32_DiskDrive con resultados Clase para interacción con la clase WMI de adaptador de red y dispositivo de almacenamiento respectivamente.
Uso de la Utilidad en nuestro proyecto:
Public Function Disco() As String
- Generamos la clase que necesitamos
- La incluimos en nuestro proyecto
- La instanciamos para el uso que queremos darle.
Dim str As String Try
Dim dL As New ROOT.CIMV2.Win32.LogicalDisk(New ManagementPath("win32_LogicalDisk.DeviceId=""c:"""))str &= vbNewLine & "DISCO LOGICO............."
Catch ex As System.Exception
str = dL.Name & "->" & dL.VolumeSerialNumber
str &= vbNewLine & dL.Name & "->" & dL.DeviceID
str &= vbNewLine & dL.Name & "->" & dL.DriveType
str &= vbNewLine & dL.Name & "->" & dL.FileSystem
str &= vbNewLine & dL.Name & "->" & dL.PNPDeviceID
str &= vbNewLine & dL.Name & "->" & dL.ProviderName
str &= vbNewLine & dL.Name & "->" & dL.Status
str &= vbNewLine & dL.Name & "->" & dL.SystemCreationClassName
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.CLASS
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.DERIVATION(0)
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.DYNASTY
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.GENUS
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.NAMESPACE
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.PATH
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.RELPATH
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.SERVER
str &= vbNewLine & dL.Name & "->" & dL.SystemProperties.SUPERCLASS
str = "Error: " & Err.Description
End Try
Return str
End Function
Esta función llenaría el string con los pares "nombre -> valor" que hemos seleccionado, pero podríamos haber seleccionado otros...
Uso de consultas WMI para recuperar.
Public
Function ExecuteWQLQuery(ByVal strWQL As String) As String
' Crear la consulta
Dim str As String
Try
Dim mySelect As New SelectQuery(strWQL)
' Inicializar el buscador con la query
Dim myResults As New ManagementObjectSearcher(mySelect)
Dim myProperty As PropertyData
Dim wmiObject As Object
' Recorrer la colecciónFor Each wmiObject In myResults.Get()
' Imprir
For Each myProperty In wmiObject.Properties
str &= vbNewLine & myProperty.Name & "->" & Convert.ToString(myProperty.Value)
Next
Next wmiObjectCatch ex As System.Exception
str = "Error: " & ex.Message
End Try
Return str
End Function
Espero que este código os ayude a profundizar en el tema.
Saludos Juan Antonio Lobón
Espacios de nombres usados en el código de este artículo:
System.
System.Management
Fichero con el código de ejemplo: juanlosa_EjemploWMI.zip - 22 KB