Récupération d’une classe WMI

Le premier type d’objet que vous pouvez récupérer est une classe WMI. Lorsque vous récupérez une classe WMI, vous récupérez en fait une définition de classe, qui est une liste des propriétés, des qualificateurs et des méthodes qui décrivent entièrement la classe. Toutefois, une définition de classe est fondamentalement la classe elle-même.

PowerShell utilise une requête standard pour récupérer les définitions de classe, à l’aide de la classe meta _ Class .

Pour récupérer une définition de classe dans PowerShell

  • Utilisez la clause with -WmiObject avec une requête to meta _ Class, avec la clause WHERE contenant le nom de la classe que vous souhaitez récupérer.

    Get-WmiObject -query "SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'"
    

    L’applet de commande is -WmiObject est l’applet de commande standard utilisée par PowerShell pour récupérer des informations de classes et d’instances à partir de WMI. La classe de la _ classe Meta définit la requête en tant que requête de schéma. Sans la classe de la classe meta _ , cette requête retourne toutes les instances de _ disque logique Win32. Pour plus d’informations sur l’interrogation de WMI, consultez instruction SELECT pour les requêtes de schéma.

Le processus actuel de récupération d’une définition WMI en C# consiste à utiliser la classe CIMInstance .

Pour récupérer une définition de classe en C# (Microsoft. Management. infrastructure)

  1. À l’aide de l’espace de noms Microsoft. Management. infrastructure , créez une classe CIMInstance avec l’espace de noms et le nom de classe spécifiés.

    La classe créée contient toutes les informations de classe, mais pas de données d’instance.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string className = "Win32_LogicalDisk";
    
    CimInstance diskDrive = new CimInstance(className, Namespace);
    
  2. Comme avec PowerShell, vous pouvez également exécuter une requête à l’aide de la balise meta _ Class dans le cadre de la requête.

    using Microsoft.Management.Infrastructure;
    ...
    string Namespace = @"root\cimv2";
    string diskDriveQuery = "SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'";
    
    CimSession mySession = CimSession.Create("localhost");
    IEnumerable<CimInstance> queryInstance = mySession.QueryInstances(Namespace, "WQL", diskDriveQuery);
    

Comme avec PowerShell, C# utilise une requête de méta- _ classe pour récupérer les définitions de classe. Vous pouvez également créer un objet ManagementClass pour accéder directement à la définition de classe.

Notes

System. Management était l’espace de noms .net d’origine utilisé pour accéder à WMI. Toutefois, les API de cet espace de noms sont généralement plus lentes et ne sont pas mises à l’échelle par rapport à leurs homologues Microsoft. Management. infrastructure plus modernes.

Pour récupérer une définition de classe en C# (System. Management)

  1. Vous pouvez utiliser ManagementObjectSerarcher avec une requête à la _ classe Meta, avec la clause WHERE contenant le nom de la classe que vous souhaitez récupérer.

    using System.Management;
    ...
    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM meta_class WHERE __class = 'Win32_LogicalDisk'");
    ManagementObjectCollection myDiskCollection = searcher.Get();
    

    ManagementObjectSerarcher est la classe standard utilisée par .net pour récupérer des informations de classes et d’instances à partir de WMI. ManagementObjectSerarcher. obtenir retourne un ManagementObjectCollection qui contient la classe de définition de schéma. La classe de la _ classe Meta définit la requête en tant que requête de schéma. Sans la classe de la classe _ meta , cette requête retourne toutes les instances de _ disque logique Win32. Pour plus d’informations sur l’interrogation de WMI, consultez instruction SELECT pour les requêtes de schéma.

  2. Vous pouvez également créer un nouvel objet ManagementClass , avec le nom comme chemin d’accès, pour récupérer la classe.

    using System.Management;
    ...
    ManagementClass objInst = new ManagementClass("Win32_LogicalDisk");
    

Vous pouvez récupérer une définition de classe dans VBScript de la même façon pour récupérer une instance spécifique.

Pour récupérer une définition de classe dans VBScript

  1. Appelez SWbemServices. obtenir mais n’identifiez pas une instance spécifique dans le chemin d’accès de l’objet pour la classe.

  2. L’exemple de code suivant récupère la définition de classe pour la classe qui décrit les lecteurs logiques sur votre ordinateur.

    Set objinst = GetObject("WinMgmts:Win32_LogicalDisk")
    

    Windows Script Host (WSH) prend également en charge les éléments suivants.

    <OBJECT id="myLocator" progid="WbemScripting.SWbemLocator"></OBJECT>
    

    Sur Active Server pages (ASP), utilisez GetObject ou CreateObject dans le script côté serveur. Pour plus d’informations, consultez création de pages de Active Server pour WMI.

  3. Une classe ou une instance peut également être spécifiée, auquel cas l’objet retourné est un objet WMI, par exemple, une instance de _ disque logique Win32, plutôt qu’un objet services. Notez que vous ne pouvez pas utiliser les fonctions VBScript GetObject pour créer une instance de l’objet générique SWbemObject.

  4. dans les pages HTML s’exécutant dans Microsoft Internet Explorer (IE), GetObject et CreateObject peuvent échouer parce que les objets de script WMI, comme les contrôles ActiveX, ne sont pas marqués comme sécurisés pour l’écriture de scripts. La seule exception est l’objet SWbemDateTime . La seule façon dont ces appels peuvent être exécutés est lorsque vous réduisez les paramètres de sécurité d’Internet Explorer, ce qui n’est pas recommandé.

Lorsque vous récupérez une classe en C++, appelez la version de la fonction IWbemServices de GetObject.

Pour récupérer une définition de classe en C++

  1. Appelez les méthodes IWbemServices :: GetObject ou IWbemServices :: GetObjectAsync pour récupérer la définition d’une classe.
  2. Une classe peut avoir plusieurs définitions de classe, ce qui se produit généralement lorsque plusieurs fournisseurs de classes sont chargés dans un même espace de noms. Quand une classe a plusieurs définitions de classe, WMI retourne le code d’état de la première définition découverte et du code d’état des _ _ _ objets en double WBEM .

Comme GetObject retourne une définition de classe, elle est couramment utilisée comme première étape de la création d’une instance. Pour plus d’informations sur l’utilisation de GetObject, consultez création et déclaration d’une instance à l’aide de C++.