Recuperar uma instância do WMI

Recuperar uma instância é um dos procedimentos de recuperação mais comuns que você provavelmente executará no WMI. Você pode recuperar uma instância existente ou criar outra instância sem nome. O caminho do WMI para a instância existente é um parâmetro obrigatório. Para obter mais informações, confira Como descrever o local de um objeto do WMI.

Observação

Ao fornecer uma instância, um provedor pode não ser capaz de fornecer um valor para determinadas propriedades. A menos que seja indicado de outra forma na descrição da propriedade, você não pode inferir nenhum significado de um valor vazio. Isso não deve ser confundido com uma cadeia de caracteres que tem um valor NULL. Nesse caso, o valor é preenchido. Ela está vazia, mas tem um valor: NULL.

 

Recupere uma cópia local da instância com uma chamada ao cmdlet Get-WmiObject do PowerShell.

Para recuperar uma instância de uma classe do WMI usando o PowerShell

  • Você pode recuperar instâncias específicas usando os parâmetros -class e -filter.

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

Você pode recuperar uma instância do WMI usando o C# e criando um objeto de pesquisa com CimInstance e preenchendo-o com os valores de chave relevantes e, em seguida, pesquisando esse objeto com uma chamada ao CimSession.GetInstance.

Para recuperar uma instância de uma classe do WMI usando C# (Microsoft.Management.Infrastructure)

  1. Usando o namespace Microsoft.Management.Infrastructure, crie um objeto CimInstance com o nome de classe e o namespace relevantes.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance myDrive = new CimInstance(className, Namespace);
    
  2. Crie uma CimProperty que contenha o nome e o valor da propriedade da chave da instância que você deseja pesquisar e adicione essa propriedade ao objeto de classe.

    myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
    
  3. Recupere o objeto do WMI com uma chamada ao CimSession.GetInstance.

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

Você pode recuperar uma instância de classe do WMI específica ou uma coleção de instâncias de classe do WMI, usando classes no namespace System.Management.

Observação

O System.Management era o namespace original do .NET usado para acessar o WMI. No entanto, as APIs nesse namespace geralmente são mais lentas e não escalam tão bem em relação às contrapartes mais modernas do Microsoft.Management.Infrastructure.

 

Para recuperar uma instância de uma classe do WMI usando C# (System.Management)

  1. Recupere uma cópia local de uma instância específica criando um ManagementObject com o nome e o valor específico da instância passados no parâmetro ManagementPath. Em seguida, você pode recuperar os dados da instância chamando explicitamente ManagementObject.Get.

    using System.Management;
    ...
    ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    objInst.Get();
    
  2. Como alternativa, você pode recuperar todas as instâncias de uma classe do WMI pesquisando-as com um ManagementObjectSearcher e enumerando por meio do ManagementObjectCollection retornado.

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

    Você pode chamar implicitamente o método Get acessando a instância. Para obter mais informações, confira Recuperar parte de uma instância do WMI.

Recupere uma cópia local da instância com uma chamada ao método GetObject do VBScript.

Para recuperar uma instância de uma classe do WMI usando VBScript

  • Chame GetObject com o caminho do objeto da instância, conforme mostrado no exemplo a seguir.

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

    Recuperar uma instância específica requer dar um nome como parte do caminho do objeto.

No C++, chame IWbemServices::GetObject.

Para recuperar uma instância de uma classe do WMI usando C++