Abrufen einer WMI-Instanz
Das Abrufen einer Instanz ist eines der gängigsten Abrufverfahren, die Sie wahrscheinlich in WMI ausführen. Sie können eine vorhandene Instanz abrufen oder eine neue unbenannte Instanz erstellen. Der WMI-Pfad zur vorhandenen Instanz ist ein erforderlicher Parameter. Weitere Informationen finden Sie unter Beschreiben des Speicherorts eines WMI-Objekts.
Hinweis
Bei der Bereitstellung einer -Instanz kann ein Anbieter möglicherweise keinen Wert für bestimmte Eigenschaften bereitstellen. Sofern in der Eigenschaftenbeschreibung nicht anders angegeben, können Sie keine Bedeutung aus einem leeren Wert abgeleitet werden. Dies ist nicht zu verwechseln mit einer Zeichenfolge, die über einen NULL-Wert verfügt. In diesem Fall wird der Wert aufgefüllt. Er ist leer, hat aber den Wert NULL.
Rufen Sie eine lokale Kopie der -Instanz mit einem Aufruf des PowerShell-Cmdlets Get-WmiObject ab.
So rufen Sie eine Instanz einer WMI-Klasse mithilfe von PowerShell ab
Sie können bestimmte Instanzen mithilfe der Parameter -class und -filter abrufen.
Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
Sie können eine WMI-Instanz mithilfe von C# abrufen, indem Sie ein Suchobjekt mit cimInstanceerstellen und dann mit den relevanten Schlüsselwerten füllen und dann mit einem CimSession.GetInstance-Aufruf nach diesem Objekt suchen.
So rufen Sie eine Instanz einer WMI-Klasse mithilfe von C# (Microsoft.Management.Infrastructure) ab
Erstellen Sie mit dem Namespace Microsoft.Management.Infrastructure ein neues CimInstance-Objekt mit dem relevanten Klassennamen und Namespace.
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string className = "Win32_LogicalDisk"; CimInstance myDrive = new CimInstance(className, Namespace);Erstellen Sie eine CimProperty-Klasse, die den Namen und Den Wert der Schlüsseleigenschaft der Instanz enthält, nach der Sie suchen möchten, und fügen Sie diese Eigenschaft Ihrem Klassenobjekt hinzu.
myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));Rufen Sie das Objekt mit einem CimSession.GetInstance-Aufruf aus WMI ab.
CimSession mySession = CimSession.Create("localhost"); CimInstance searchInstance = mySession.GetInstance(Namespace, myDrive);
Sie können entweder eine bestimmte WMI-Klasseninstanz oder eine Auflistung von WMI-Klasseninstanzen mithilfe von Klassen im System.Management-Namespace abrufen.
Hinweis
System.Management war der ursprüngliche .NET-Namespace, der für den Zugriff auf WMI verwendet wurde. Die APIs in diesem Namespace sind jedoch im Allgemeinen langsamer und werden im Vergleich zu ihren moderneren Entsprechungen von Microsoft.Management.Infrastructure nicht so gut skaliert.
So rufen Sie eine Instanz einer WMI-Klasse mithilfe von C# (System.Management) ab
Rufen Sie eine lokale Kopie einer bestimmten Instanz ab, indem Sie ein neues ManagementObjecterstellen, wobei der Name und der spezifische Instanzwert durch den ManagementPath-Parameter übergeben werden. Sie können dann die Instanzdaten abrufen, indem Sie ManagementObject.Get explizit aufrufen.
using System.Management; ... ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); objInst.Get();Alternativ können Sie alle Instanzen einer WMI-Klasse abrufen, indem Sie mit managementObjectSearcherdanach suchen und dann die zurückgegebene ManagementObjectCollection aufzählen.
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();Sie können die Get-Methode implizit aufrufen, indem Sie auf die -Instanz zugreifen. Weitere Informationen finden Sie unter Abrufen eines Teils einer WMI-Instanz.
Rufen Sie eine lokale Kopie der -Instanz mit einem Aufruf der VBScript GetObject-Methode ab.
So rufen Sie eine Instanz einer WMI-Klasse mit VBScript ab
Rufen Sie GetObject mit dem Objektpfad der -Instanz auf, wie im folgenden Beispiel gezeigt.
Set objinst = GetObject("WinMgmts:Win32_LogicalDisk='C:'")Zum Abrufen einer bestimmten Instanz muss ein Name als Teil des Objektpfads verwendet werden.
Rufen Sie in C++ IWbemServices::GetObject auf.
So rufen Sie eine Instanz einer WMI-Klasse mit C++ ab
Rufen Sie eine lokale Kopie der -Instanz mit einem Aufruf von IWbemServices::GetObject oder IWbemServices::GetObjectAsync ab. Der WMI-Pfad zum -Objekt muss eingeschlossen werden.
Wie der Name schon sagt, ruft GetObjectAsync die Instanz asynchron ab, während GetObject die Instanz synchron abruft. Wenn Sie den asynchronen Abruf verwenden möchten, müssen Sie die IWbemObjectSink-Schnittstelle implementieren.
Beispiele
Ein VBScript-Beispiel, das als Vorlage zum Abrufen von Klassen- und Instanzinformationen verwendet werden soll, finden Sie im Beispiel für ein WMI-Vorlagenskript im TechNet-Katalog. In diesem speziellen Beispiel wird GetObject verwendet, um den WMI-Dienst abzurufen.