Introduction
After looking at dozens of simple scripts and apps that each pull 5-6 fields of information from one WMI class, I decided it would be so much easier to just pull everything into a DataTable
and work from there. This simple function exposes all of the properties and values on any given WMI class and returns a DataTable
with the results.
The code
First off, you'll need to use these libraries:
Imports System.Data
Imports System.Management
Imports Microsoft.Win32
Next up, create an empty DataTable
and a ManagementObjectSearcher
to be the base of our query to the WMI service.
Dim dt As New DataTable()
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _ "SELECT * FROM " & wmiClass)
In order to get all of the property names, you have to grab the first ManagementObject
in the searcher. Then, simply loop through each of the property names in the object and add a column to the table for each property.
For Each queryObj As ManagementObject In searcher.Get()
For Each item As PropertyData In queryObj.Properties()
Try
dt.Columns.Add(item.Name)
Catch ex As Exception
End Try
Next
Exit For
Next
Then, loop through each of object in the searcher, and add the values for each property of each object to the data table:
For Each queryObj As ManagementObject In searcher.Get()
Dim dr As DataRow = dt.NewRow
For Each item As PropertyData In queryObj.Properties()
Try
dr(item.Name) = item.Value
Catch ex As Exception
End Try
Next
dt.Rows.Add(dr)
Next
That's it! Now, you have a DataTable
(dt
) with all of the properties and values of the given WMI class. Try setting the wmiClass
variable to any of the following:
Win32_OperatingSystem
Win32_OnBoardDevice
(hardware devices)Win32_Process
(current processes)Win32_Printer
(printers)Win32_Product
(installed software)Win32_QuickFixEngineering
(installed patches)
Bind dt
to a GridView
and see the results. If you want to get really fancy, you can also use a DropDownList
to set the wmiClass
variable and easily see tons of data about your system. Microsoft has a simple reference for many of the WMI tasks here: http://msdn.microsoft.com/en-us/library/aa394585(VS.85).aspx.
Enjoy!