Recupero di un'istanza WMI
Il recupero di un'istanza è una delle procedure di recupero più comuni che è probabile eseguire in WMI. È possibile recuperare un'istanza esistente o creare una nuova istanza senza nome. Il percorso WMI dell'istanza esistente è un parametro obbligatorio. Per altre informazioni, vedere Descrizione della posizione di un oggetto WMI.
Nota
Quando si specifica un'istanza, un provider potrebbe non essere in grado di fornire un valore per determinate proprietà. Se non diversamente specificato nella descrizione della proprietà, non è possibile dedurre alcun significato da un valore vuoto. Non deve essere confuso con una stringa con un valore NULL. In questo caso, il valore viene compilato. È vuoto ma ha un valore: NULL.
Recuperare una copia locale dell'istanza con una chiamata al cmdlet Get-WmiObject di PowerShell.
Per recuperare un'istanza di una classe WMI tramite PowerShell
È possibile recuperare istanze specifiche usando i parametri -class e -filter.
Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
È possibile recuperare un'istanza WMI usando C# creando un oggetto di ricerca usando CimInstancee quindi riempindolo con i valori di chiave pertinenti e quindi cercando tale oggetto con un CimSession.GetInstance chiamata.
Per recuperare un'istanza di una classe WMI tramite C# (Microsoft.Management.Infrastructure)
Usando lo spazio dei nomi Microsoft.Management.Infrastructure, creare un nuovo oggetto CimInstance con il nome e lo spazio dei nomi della classe pertinenti.
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string className = "Win32_LogicalDisk"; CimInstance myDrive = new CimInstance(className, Namespace);
Creare un CimProperty che contiene il nome e il valore della proprietà chiave dell'istanza da cercare e aggiungere tale proprietà all'oggetto classe.
myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
Recupera l'oggetto da WMI con una chiamata a CimSession.GetInstance.
CimSession mySession = CimSession.Create("localhost"); CimInstance searchInstance = mySession.GetInstance(Namespace, myDrive);
È possibile recuperare un'istanza di classe WMI specifica o una raccolta di istanze della classe WMI usando classi nello spazio dei nomi System.Management.
Nota
System.Management era lo spazio dei nomi .NET originale usato per accedere a WMI; tuttavia, le API in questo spazio dei nomi sono in genere, più lente e non sono altrettanto scalabili rispetto alle rispettive controparti più moderne di Microsoft.Management.Infrastructure.
Per recuperare un'istanza di una classe WMI usando C# (System.Management)
Recuperare una copia locale di un'istanza specifica creando un nuovo ManagementObject, con il nome e il valore di istanza specifico passati tramite il parametro ManagementPath. È quindi possibile recuperare i dati dell'istanza chiamando in modo esplicito ManagementObject.Get.
using System.Management; ... ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); objInst.Get();
In alternativa, è possibile recuperare tutte le istanze di una classe WMI cercandole con un ManagementObjectSearchere quindi enumerando l'oggetto ManagementObjectCollection restituito.
using System.Management; ... ManagementObjectSearcher mgmtObjSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"); ManagementObjectCollection colDisks = mgmtObjSearcher.Get(); foreach (ManagementObject objDisk in colDisks) { Console.WriteLine("Device ID : {0}", objDisk["DeviceID"]); } Console.ReadLine();
È possibile chiamare in modo implicito il metodo Get accedendo all'istanza. Per altre informazioni, vedere Recupero di una parte di un'istanza WMI.
Recuperare una copia locale dell'istanza con una chiamata al metodo GetObject di VBScript.
Per recuperare un'istanza di una classe WMI tramite VBScript
Chiamare GetObject con il percorso dell'oggetto dell'istanza, come illustrato nell'esempio seguente.
Set objinst = GetObject("WinMgmts:Win32_LogicalDisk='C:'")
Per recuperare un'istanza specifica è necessario assegnare un nome come parte del percorso dell'oggetto.
In C++, chiamare IWbemServices::GetObject.
Per recuperare un'istanza di una classe WMI con C++
Recuperare una copia locale dell'istanza con una chiamata a IWbemServices::GetObject o IWbemServices::GetObjectAsync. È necessario includere il percorso WMI dell'oggetto.
Come suggerisce il nome, getObjectAsync recupera l'istanza in modo asincrono, mentre GetObject recupera l'istanza in modo sincrono. Se si vuole usare il recupero asincrono, è necessario implementare l'interfacciaIWbemObjectSink.