Partilhar via


Recuperando uma instância WMI

A recuperação de 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 uma nova instância sem nome. O caminho WMI para a instância existente é um parâmetro necessário. Para obter mais informações, consulte descrevendo o local de um objeto WMI.

Observação

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

 

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

Para recuperar uma instância de uma classe 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 WMI usando C# ao criar um objeto de pesquisa com CimInstance, preenchê-lo com os valores de chave relevantes e buscar esse objeto com uma chamada para CimSession.GetInstance.

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

  1. Usando o namespace Microsoft.Management.Infrastructure, crie um novo objeto CimInstance com o nome da 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 um CimProperty que contenha o nome e o valor da propriedade-chave da instância que se deseja pesquisar e adicione essa propriedade ao objeto da sua classe.

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

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

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

Observação

System.Management era o namespace .NET original usado para acessar o WMI; no entanto, as APIs neste namespace geralmente são mais lentas e não são dimensionadas tão bem em relação às suas contrapartes mais modernas Microsoft.Management.Infrastructure.

 

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

  1. Recupere uma cópia local de uma instância específica criando um novo ManagementObject, com o nome e o valor da instância específica passados através do 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 WMI pesquisando-as com um ManagementObjectSearchere, em seguida, percorrendo o ManagementObjectCollectionretornado.

    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, consulte Recuperando Parte de uma Instância WMI.

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

Para recuperar uma instância de uma classe 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:'")
    

    A recuperação de uma instância específica requer especificar um nome como parte do caminho do objeto.

Em C++, chame IWbemServices::GetObject.

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