Поделиться через


Получение экземпляра WMI

Получение экземпляра является одной из наиболее распространенных процедур извлечения, которые, скорее всего, будут выполняться в WMI. Можно получить существующий экземпляр или создать новый неименованный экземпляр. Путь WMI к существующему экземпляру является обязательным параметром. Дополнительные сведения см. в разделе "Описание расположения объекта WMI".

Примечание.

При предоставлении экземпляра поставщику может быть не удается указать значение для определенных свойств. Если иное не указано в описании свойства, вы не можете вывести какое-либо значение из пустого значения. Это не следует путать со строкой, которая имеет значение NULL . В этом случае значение заполняется. Он пуст, но имеет значение NULL.

 

Получите локальную копию экземпляра с вызовом командлета Get-WmiObject PowerShell.

Получение экземпляра класса WMI с помощью PowerShell

  • Вы можете получить определенные экземпляры с помощью параметров -class и -filter .

    Get-WmiObject -query "SELECT * FROM Win32_logicalDisk WHERE DeviceID = 'C:'"
    

Экземпляр WMI можно получить с помощью C# путем создания объекта поиска с помощью CimInstance, а затем заполнения соответствующими значениями ключей, а затем поиска этого объекта с помощью вызова CimSession.GetInstance.

Получение экземпляра класса WMI с помощью C# (Microsoft.Management.Infrastructure)

  1. Используя пространство имен Microsoft.Management.Infrastructure, создайте новый объект CimInstance с соответствующим именем класса и пространством имен.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance myDrive = new CimInstance(className, Namespace);
    
  2. Создайте CimProperty, содержащее имя и значение ключевого свойства экземпляра, который вы хотите найти, и добавьте это свойство в объект класса.

    myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
    
  3. Извлеките объект из WMI с помощью вызова CimSession.GetInstance .

    CimSession mySession = CimSession.Create("localhost");
    CimInstance searchInstance = mySession.GetInstance(Namespace, myDrive);
    

Можно получить определенный экземпляр класса WMI или коллекцию экземпляров классов WMI, используя классы в пространстве имен System.Management .

Примечание.

System.Management — это исходное пространство имен .NET, используемое для доступа к WMI. Однако API в этом пространстве имен обычно медленнее и не масштабируются и не масштабируются по сравнению с более современными аналогами Microsoft.Management.Infrastructure .

 

Получение экземпляра класса WMI с помощью C# (System.Management)

  1. Получите локальную копию конкретного экземпляра, создав новый ManagementObject с именем и значением конкретного экземпляра, переданным в параметре ManagementPath . Затем можно получить данные экземпляра, явно вызвав ManagementObject.Get.

    using System.Management;
    ...
    ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    objInst.Get();
    
  2. Кроме того, можно получить все экземпляры класса WMI, выполнив поиск по ним с помощью ManagementObjectSearcher, а затем перечислив возвращенный ManagementObjectCollection.

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

    Метод Get можно вызывать неявно, доступ к экземпляру. Дополнительные сведения см. в разделе "Получение части экземпляра WMI".

Получите локальную копию экземпляра с вызовом метода GetObject VBScript.

Получение экземпляра класса WMI с помощью VBScript

  • Вызов GetObject с путем объекта экземпляра, как показано в следующем примере.

    Set objinst = GetObject("WinMgmts:Win32_LogicalDisk='C:'")
    

    Получение определенного экземпляра требует предоставления имени в рамках пути объекта.

В C++вызовите IWbemServices::GetObject.

Получение экземпляра класса WMI с помощью C++

  • Получите локальную копию экземпляра с вызовом IWbemServices::GetObject или IWbemServices::GetObjectAsync. Путь WMI к объекту должен быть включен.

    Как подразумевает имя, GetObjectAsync извлекает экземпляр асинхронно, а GetObject получает экземпляр синхронно. Если вы хотите использовать асинхронное извлечение, необходимо реализовать интерфейс IWbemObjectSink.