Il namespace System.Management (contenuto nell’assembly System.Management.dll) contiene un insieme di classi che ci consentono di eseguire delle query nei parametri del sistema operativo alla ricerca di entità altrimenti non recuperabili con le classi del framework.
La classe fondamentale è la ManagementObjectSearcher la cui funzione è quella di eseguire delle vere e proprie query (stile SQL) all’interno delle “tabelle” di sistema e restituire una collezione di ManagementObject contenenti i valori.
Ad esempio per eseguire una ricerca all’interno dei parametri del processore, possiamo scrivere:
- Dim oSearcher As New ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
- Dim oMgmtObjs = oSearcher.Get
La collezione oMgmtObjs contiene l’insieme dei parametri di sistema della “tabella” Win32_Processor.
La struttura ritornata dalla query è consultabile all’indirizzo http://msdn.microsoft.com/en-us/library/aa394373(v=VS.85).aspx e troviamo, ad esempio, il parametro Manufacturer che ci fornisce informazioni riguardanti il costruttore del processore.
La seguente funzione permette di accedere ad una collezione di oggetti di una tabella di sistema a partire dal nome della tabella e del campo:
- Public Function GetWMIField(ByVal wmiClass As String, ByVal wmiField As String) As IEnumerable(Of Object)
- Dim retObj As IEnumerable(Of Object) = Nothing
- Try
- Using oSearcher = New ManagementObjectSearcher(String.Format("SELECT * FROM {0}", wmiClass))
- Dim oMgmtObjs = oSearcher.Get
- If oMgmtObjs IsNot Nothing Then
- Try
- retObj = (From i In oMgmtObjs.OfType(Of ManagementObject)()
- Select i(wmiField)).ToList()
- Catch ex As Exception
- Throw New ApplicationException("WMIField not exists!")
- End Try
- End If
- End Using
- Catch ex As Exception
- Throw New ApplicationException("WMIClass not exists!")
- End Try
- Return retObj
- End Function
Utilizzando questa funzione possiamo ricavare, ad esempio l’identificativo del processore, la data di installazione del sistema operativo o il tipo di batteria installata in un notebook:
- Sub Main()
- Dim processorID = GetWMIField("Win32_Processor", "ProcessorId").First()
- Dim osInstallDate = GetWMIField("Win32_OperatingSystem", "InstallDate").First()
- Dim CurrentReading = GetWMIField("Win32_Battery", "Chemistry").First()
- End Sub
Per avere la lista completa delle classi WMI Win32 su cui eseguire la ricerca, vedere il link http://msdn.microsoft.com/en-us/library/aa394084(v=VS.85).aspx mentre l’intero elenco delle classi WMI è disponibile all’indirizzo http://msdn.microsoft.com/en-us/library/aa394554(v=VS.85).aspx.
Commenti