Abrufen einer WMI-Instanz

Das Abrufen einer Instanz ist wahrscheinlich einer der häufigsten Abrufvorgänge, die Sie 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

Beim Bereitstellen einer Instanz ist ein Anbieter möglicherweise nicht in der Lage, für bestimmte Eigenschaften einen Wert bereitzustellen. Sofern in der Eigenschaftsbeschreibung nicht anders angegeben, können Sie aus einem leeren Wert keine Bedeutung ableiten. Dies ist nicht mit einer Zeichenfolge zu verwechseln, die einen NULL-Wert aufweist. In diesem Fall ist der Wert aufgefüllt. Er ist leer, hat jedoch einen 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 mithilfe von CimInstance ein Suchobjekt erstellen, es dann mit den relevanten Schlüsselwerten füllen und anschließend mit einem CimSession.GetInstance-Aufruf nach diesem Objekt suchen.

So rufen Sie eine Instanz einer WMI-Klasse mithilfe von C# (Microsoft.Management.Infrastructure) ab

  1. Erstellen Sie mithilfe des Microsoft.Management.Infrastructure-Namespace ein neues CimInstance-Objekt mit dem entsprechenden Klassennamen und Namespace.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance myDrive = new CimInstance(className, Namespace);
    
  2. Erstellen Sie eine CimProperty-Eigenschaft, die den Namen und den Wert der Schlüsseleigenschaft der Instanz enthält, nach der Sie suchen möchten, und fügen Sie Ihrem Klassenobjekt diese Eigenschaft hinzu.

    myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
    
  3. Rufen Sie das Objekt bei WMI mit einem CimSession.GetInstance-Aufruf 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 können im Vergleich zu ihren moderneren Microsoft.Management.Infrastructure-Entsprechungen nicht so gut skaliert werden.

 

So rufen Sie eine Instanz einer WMI-Klasse mit C# (System.Management) ab

  1. Rufen Sie eine lokale Kopie einer bestimmten Instanz ab, indem Sie ein neues ManagementObject mit dem Namen und dem spezifischen Instanzwert erstellen, der über den ManagementPath-Parameter übergeben wird. Anschließend können Sie die Instanzdaten abrufen, indem Sie ManagementObject.Get explizit aufrufen.

    using System.Management;
    ...
    ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    objInst.Get();
    
  2. Alternativ können Sie alle Instanzen einer WMI-Klasse abrufen, indem Sie sie mit einem ManagementObjectSearcher suchen und dann die zurückgegebene ManagementObjectCollection auflisten.

    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();
    

    Die Get-Methode lässt sich implizit durch Zugreifen auf die Instanz aufrufen. Weitere Informationen finden Sie unter Abrufen eines Teils einer WMI-Instanz.

Rufen Sie eine lokale Kopie der Instanz mit einem Aufruf der VBScript-Methode GetObject ab.

So rufen Sie eine Instanz einer WMI-Klasse mithilfe von 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 ist die Angabe eines Namens als Teil des Objektpfads erforderlich.

Rufen Sie in C++ IWbemServices::GetObject auf.

So rufen Sie eine Instanz einer WMI-Klasse mithilfe von C++ ab