Mgmtclassgen.exe (Management Strongly Typed Class Generator)

L'outil Management Strongly Typed Class Generator vous permet de générer rapidement une classe managée à liaison anticipée pour une classe WMI (Windows Management Instrumentation) spécifiée. La classe générée simplifie le code à écrire pour accéder à une instance de la classe WMI.

Cet outil est installé automatiquement avec Visual Studio et avec le Kit de développement logiciel Windows. Pour exécuter l'outil, nous vous recommandons d'utiliser l'invite de commandes Visual Studio ou l'invite de commandes du Kit de développement logiciel (l'interpréteur de commandes CMD). Ces utilitaires vous permettent d'exécuter l'outil facilement, sans naviguer jusqu'au dossier d'installation. Pour plus d'informations, consultez Invites de commandes Visual Studio e t Kit de développement logiciel (SDK) Windows.

  • Si Visual Studio est installé sur votre ordinateur : dans la barre des tâches, cliquez sur le bouton Start, All Programs, Visual Studio, sur Visual Studio Tools, puis sur Visual Studio Command Prompt.

    ou

    Si vous avez le Kit de développement logiciel Windows installé sur votre ordinateur : Dans la barre des tâches, cliquez sur Start, All Programs, le dossier correspondant au Kit de développement logiciel, puis sur Command Prompt (ou CMD Shell).

  • À l'invite de commandes, tapez ce qui suit :

mgmtclassgen WMIClass [options] 

Argument

Description

WMIClass

Classe Windows Management Instrumentation pour laquelle générer une classe managée à liaison anticipée.

Option

Description

/l langage

Spécifie le langage à utiliser pour générer la classe managée à liaison anticipée. Vous pouvez spécifier CS (C#, valeur par défaut), VB (Visual Basic), MC (extensions managées pour C++), JS (JScript) comme argument de langage.

/m ordinateur

Spécifie l'ordinateur auquel se connecter sur lequel la classe WMI se trouve. Par défaut, l'ordinateur local est sélectionné.

/n chemin

Spécifie le chemin vers l'espace de noms WMI qui contient la classe WMI. Si vous ne spécifiez pas cette option, l'outil générera le code pour WMIClass dans l'espace de noms Root\cimv2.

/o espacedenomsdelaclasse

Spécifie l'espace de noms .NET dans lequel générer la classe de code managé. Si vous ne spécifiez pas cette option, l'outil générera l'espace de noms en fonction de l'espace de noms WMI et du préfixe du schéma. Le préfixe du schéma est la partie du nom de la classe qui précède le trait de soulignement. Par exemple, pour la classe Win32_OperatingSystem qui se trouve dans l'espace de noms Root\cimv2, l'outil générera la classe dans ROOT.CIMV2.Win32.

/p chemindufichier

Spécifie le chemin vers le fichier dans lequel le code généré sera enregistré. Si vous ne spécifiez pas cette option, l'outil créera le fichier dans le répertoire actif. Il nomme la classe et le fichier dans lequel il génère la classe à l'aide de l'argument WMIClass. Le nom de la classe et du fichier est le même que celui de WMIClass. Si WMIClass contient un trait de soulignement, l'outil utilise la partie du nom de la classe suivant le trait de soulignement. Par exemple, si le nom WMIClass est Win32_LogicalDisk, la classe et le fichier générés sont nommés "logicaldisk". Si un fichier existe déjà, l'outil écrase le fichier existant.

/pw motdepasse

Définit le mot de passe à utiliser lorsque vous vous connectez à un ordinateur spécifié par l'option /m.

/u nom d'utilisateur

Définit le nom d'utilisateur à utiliser lorsque vous vous connectez à un ordinateur spécifié par l'option /m.

/?

Affiche la syntaxe et les options de commande de l'outil.

Notes

Mgmtclassgen.exe utilise la méthode ManagementClass.GetStronglyTypedClassCode. Vous pouvez donc utiliser n'importe quel fournisseur de code personnalisé pour générer le code dans des langages managés autres que C#, Visual Basic et JScript.

Notez que les classes générées sont liées au schéma pour lequel elles ont été créées. Si le schéma sous-jacent change, vous devez régénérer la classe pour que les modifications effectuées dans le schéma soient prises en compte.

Le tableau suivant montre la correspondance entre les types Common Information Model (CIM) WMI et les types de données d'une classe générée :

Type CIM

Type de données dans la classe générée

CIM_SINT8

SByte

CIM_UINT8

Byte

CIM_SINT16

Int16

CIM_UINT16

UInt16

CIM_SINT32

Int32

SIM_UINT32

UInt32

CIM_SINT64

Int64

CIM_UINT64

UInt64

CIM_REAL32

Single

CIM_REAL64

Double

CIM_BOOLEAN

Boolean

CIM_String

String

CIM_DATETIME

DateTime ou TimeSpan

CIM_REFERENCE

ManagementPath

CIM_CHAR16

Char

CIM_OBJECT

ManagementBaseObject

CIM_IUNKNOWN

Objet

CIM_ARRAY

Tableau des objets mentionnés ci-dessus

Les comportements suivants peuvent s'observer lorsque vous générez une classe WMI :

  • Il est possible d'utiliser un nom de propriété ou de méthode existant pour une méthode ou une propriété standard publique. Dans ce cas, l'outil modifie le nom de la propriété ou de la méthode dans la classe générée pour éviter les conflits entre les noms.

  • Le nom d'une propriété ou d'une méthode dans une classe générée peut être un mot clé dans le langage de programmation cible. Dans ce cas, l'outil modifie le nom de la propriété ou de la méthode dans la classe générée pour éviter les conflits entre les noms.

  • Dans WMI, les qualificateurs sont des modificateurs contenant des informations qui décrivent une classe, une instance, une propriété ou une méthode. WMI utilise des qualificateurs standard, tels que Read, Write et Key pour décrire une propriété dans une classe générée. Par exemple, une propriété modifiée avec un qualificateur Read est définie uniquement avec un accesseur get de propriété dans la classe générée. Les propriétés marquées avec un qualificateur Read restant en lecture seule, aucun accesseur set n'est défini.

  • Une propriété numérique peut être modifiée par les qualificateurs Values et ValueMaps pour indiquer que seules des valeurs autorisées et spécifiées peuvent lui être affectées. Une énumération est générée avec ces Values et ValueMaps, et la propriété est mappée à l'énumération.

  • WMI utilise le singleton de terme pour décrire une classe qui ne peut avoir qu'une seule instance. C'est pourquoi le constructeur par défaut d'une classe singleton analysera l'instance de la classe.

  • Une classe WMI peut avoir des objets pour propriétés. Lorsque vous générez une classe fortement typée pour ce type de classe WMI, n'oubliez pas de générer également des classes fortement typées pour les types des propriétés de l'objet incorporé. Cela vous permettra d'accéder aux objets incorporés fortement typés. Il est possible que le code généré ne puisse pas détecter le type de l'objet incorporé. Dans ce cas, un commentaire sera créé dans le code généré pour vous en avertir. Vous pouvez alors modifier le code généré pour typer la propriété vers l'autre classe générée.

  • Dans WMI, la valeur du type de données CIM_DATETIME peut représenter soit une date ou une heure, soit un intervalle de temps spécifique. Si la valeur représente une date et une heure, le type de données de la classe générée est DateTime. Si la valeur représente un intervalle de temps, le type de données de la classe générée est TimeSpan.

Vous pouvez également générer une classe fortement typée à l'aide de Management Extension dans l'Explorateur de serveurs de Visual Studio .NET.

Pour plus d'informations sur WMI, consultez la rubrique Windows Management Instrumentation dans la documentation du Kit de développement Platform SDK.

Exemples

La commande suivante génère une classe managée en C# pour la classe WMI Win32_LogicalDisk dans l'espace de noms Root\cimv2. L'outil écrit la classe managée dans le fichier source sous c:\disk.cs dans l'espace de noms ROOT.CIMV2.Win32.

mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs

L'exemple de code suivant montre comment utiliser par programme une classe générée. Tout d'abord, une instance de la classe est énumérée et le chemin est imprimé. Ensuite, une instance de la classe générée à initialiser est créée avec une instance de WMI. Process est la classe générée pour Win32_Process et LogicalDisk est la classe générée pour Win32_LogicalDisk dans l'espace de noms Root\cimv2.

Imports System
Imports System.Management
Imports ROOT.CIMV2.Win32

Public Class App   
   Public Shared Sub Main()      
      ' Enumerate instances of the Win32_process.
      ' Print the Name property of the instance.
      Dim ps As Process   
      For Each ps In  Process.GetInstances()
         Console.WriteLine(ps.Name)
      Next ps
      
      ' Initialize the instance of LogicalDisk with
      ' the WMI instance pointing to logical drive d:.
      Dim dskD As New LogicalDisk(New _
         ManagementPath("win32_LogicalDisk.DeviceId=""d:"""))
      Console.WriteLine(dskD.Caption)
   End Sub
End Class
using System;
using System.Management;
using ROOT.CIMV2.Win32;

public class App
{
   public static void Main()
   {
      // Enumerate instances of the Win32_process.
      // Print the Name property of the instance.
      foreach(Process ps in Process.GetInstances())
      {
         Console.WriteLine(ps.Name);
      }

      // Initialize the instance of LogicalDisk with
      // the WMI instance pointing to logical drive d:.
      LogicalDisk dskD = new LogicalDisk(new ManagementPath(
        "win32_LogicalDisk.DeviceId=\"d:\""));
      Console.WriteLine(dskD.Caption);
   }
}

Voir aussi

Référence

System.Management

ManagementClass.GetStronglyTypedClassCode

System.CodeDom.Compiler.CodeDomProvider

Invites de commandes Visual Studio e t Kit de développement logiciel (SDK) Windows

Autres ressources

Outils du .NET Framework

Historique des modifications

Date

Historique

Motif

Avril 2011

Informations supplémentaires sur l'utilisation des invites de commandes de Visual Studio et du Kit de développement logiciel (SDK) Windows.

Améliorations apportées aux informations.