Recupero di un'istanza WMI

Il recupero di un'istanza è una delle procedure di recupero più comuni che è probabile eseguire in WMI. È possibile recuperare un'istanza esistente o creare una nuova istanza senza nome. Il percorso WMI dell'istanza esistente è un parametro obbligatorio. Per altre informazioni, vedere Descrizione della posizione di un oggetto WMI.

Nota

Quando si specifica un'istanza, un provider potrebbe non essere in grado di fornire un valore per determinate proprietà. Se non diversamente specificato nella descrizione della proprietà, non è possibile dedurre alcun significato da un valore vuoto. Questa operazione non deve essere confusa con una stringa che ha un valore NULL . In questo caso, il valore viene popolato. È vuoto ma ha un valore: NULL.

 

Recuperare una copia locale dell'istanza con una chiamata al cmdlet Get-WmiObject di PowerShell.

Per recuperare un'istanza di una classe WMI tramite PowerShell

  • È possibile recuperare istanze specifiche usando i parametri -class e -filter .

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

È possibile recuperare un'istanza WMI usando C# creando un oggetto di ricerca usando CimInstance e quindi riempindolo con i valori chiave pertinenti e quindi cercando tale oggetto con una chiamata CimSession.GetInstance .

Per recuperare un'istanza di una classe WMI usando C# (Microsoft.Management.Infrastructure)

  1. Usando lo spazio dei nomi Microsoft.Management.Infrastructure , creare un nuovo oggetto CimInstance con il nome e lo spazio dei nomi della classe pertinenti.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance myDrive = new CimInstance(className, Namespace);
    
  2. Creare un Oggetto CimProperty contenente il nome e il valore della proprietà chiave dell'istanza di cui si vuole cercare e aggiungere tale proprietà all'oggetto classe.

    myDrive.CimInstanceProperties.Add(CimProperty.Create("DeviceID", "C:", CimFlags.Key));
    
  3. Recuperare l'oggetto da WMI con una chiamata CimSession.GetInstance .

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

È possibile recuperare un'istanza specifica della classe WMI o una raccolta di istanze della classe WMI usando le classi nello spazio dei nomi System.Management .

Nota

System.Management era lo spazio dei nomi .NET originale usato per accedere a WMI. Tuttavia, le API in questo spazio dei nomi sono in genere più lente e non vengono ridimensionate anche rispetto alle controparti Microsoft.Management.Infrastructure più moderne.

 

Per recuperare un'istanza di una classe WMI usando C# (System.Management)

  1. Recuperare una copia locale di un'istanza specifica creando un nuovo ManagementObject, con il nome e il valore dell'istanza specifico passati tramite il parametro ManagementPath . È quindi possibile recuperare i dati dell'istanza chiamando in modo esplicito ManagementObject.Get.

    using System.Management;
    ...
    ManagementObject objInst = new ManagementObject("Win32_LogicalDisk.DeviceID='C:'");
    objInst.Get();
    
  2. In alternativa, è possibile recuperare tutte le istanze di una classe WMI cercandole con managementObjectSearcher e quindi enumerando l'oggetto ManagementObjectCollection restituito.

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

    È possibile chiamare in modo implicito il metodo Get accedendo all'istanza di . Per altre informazioni, vedere Recupero di parte di un'istanza WMI.

Recuperare una copia locale dell'istanza con una chiamata al metodo GetObject VBScript.

Per recuperare un'istanza di una classe WMI utilizzando VBScript

  • Chiamare GetObject con il percorso dell'oggetto dell'istanza, come illustrato nell'esempio seguente.

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

    Per recuperare un'istanza specifica è necessario assegnare un nome come parte del percorso dell'oggetto.

In C++ chiamare IWbemServices::GetObject.

Per recuperare un'istanza di una classe WMI usando C++