Получение экземпляра 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)
Используя пространство имен Microsoft.Management.Infrastructure, создайте новый объект CimInstance с соответствующим именем класса и пространством имен.
using Microsoft.Management.Infrastructure; ... string Namespace = @"root\cimv2"; string className = "Win32_LogicalDisk"; CimInstance myDrive = new CimInstance(className, Namespace);
Создайте CimProperty, содержащее имя и значение ключевого свойства экземпляра, который вы хотите найти, и добавьте это свойство в объект класса.
myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
Извлеките объект из 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)
Получите локальную копию конкретного экземпляра, создав новый ManagementObject с именем и значением конкретного экземпляра, переданным в параметре ManagementPath . Затем можно получить данные экземпляра, явно вызвав ManagementObject.Get.
using System.Management; ... ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'"); objInst.Get();
Кроме того, можно получить все экземпляры класса 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.