Mgmtclassgen.exe (Generador de clases fuertemente tipadas para administración)Mgmtclassgen.exe (Management Strongly Typed Class Generator)

La herramienta Generador de clases fuertemente tipadas para administración permite generar con rapidez una clase administrada en tiempo de compilación para una clase especificada de Instrumental de administración de Windows (WMI).The Management Strongly Typed Class Generator tool enables you to quickly generate an early-bound managed class for a specified Windows Management Instrumentation (WMI) class. La clase generada simplifica el código que se debe escribir para tener acceso a una instancia de la clase de WMI.The generated class simplifies the code you must write to access an instance of the WMI class.

SintaxisSyntax

mgmtclassgen   
WMIClass [options]   
ArgumentoArgument DescripciónDescription
WMIClassWMIClass Clase de Instrumental de administración de Windows para la que se genera una clase administrada en tiempo de compilación.The Windows Management Instrumentation class for which to generate an early-bound managed class.
OpciónOption DescripciónDescription
/l language/l language Especifica el lenguaje en el que se genera la clase administrada en tiempo de compilación.Specifies the language in which to generate the early-bound managed class. Puede especificar CS (C#, predeterminado), VB (Visual Basic), MC (C++) o JS (JScript) como argumento del lenguaje.You can specify CS (C#; default), VB (Visual Basic), MC (C++), or JS (JScript) as the language argument.
/m machine/m machine Especifica el equipo con el que se va a conectar y en el que reside la clase de WMI.Specifies the computer to connect to, where the WMI class resides. La opción predeterminada es el equipo local.The default is the local computer.
/n ruta/n path Especifica la ruta de acceso al espacio de nombres de WMI que contiene la clase de WMI.Specifies the path to the WMI namespace that contains the WMI class. Si no se especifica esta opción, la herramienta genera código para WMIClass en el espacio de nombres Root\cimv2 predeterminado.If you do not specify this option, the tool generates code for WMIClass in the default Root\cimv2 namespace.
/o classnamespace/o classnamespace Especifica el espacio de nombres de .NET en el que se genera la clase de código administrado.Specifies the .NET namespace in which to generate the managed code class. Si no se especifica esta opción, la herramienta genera el espacio de nombres utilizando el espacio de nombres de WMI y el prefijo de esquema.If you do not specify this option, the tool generates the namespace using the WMI namespace and the schema prefix. El prefijo de esquema es la parte del nombre de clase que figura delante del carácter de subrayado.The schema prefix is the part of the class name preceding the underscore character. Por ejemplo, para la clase Win32_OperatingSystem del espacio de nombres Root\cimv2, la herramienta generaría la clase en ROOT.CIMV2.Win32.For example, for the Win32_OperatingSystem class in the Root\cimv2 namespace, the tool would generate the class in ROOT.CIMV2.Win32.
/p filepath/p filepath Especifica la ruta de acceso al archivo donde se guarda el código generado.Specifies the path to the file in which to save the generated code. Si no se especifica esta opción, la herramienta crea el archivo en el directorio actual.If you do not specify this option, the tool creates the file in the current directory. Asigna un nombre a la clase y al archivo donde se genera la clase mediante el argumento WMIClass.It names the class and file in which it generates the class using the WMIClass argument. El nombre de la clase y el nombre del archivo coinciden con el nombre de WMIClass.The name of the class and the file are the same as the name of the WMIClass. Si WMIClass contiene un carácter de subrayado, la herramienta usa la parte del nombre de clase que figura detrás del carácter de subrayado.If WMIClass contains an underscore character, the tool uses the part of the class name following the underscore character. Por ejemplo, si el nombre de WMIClass tiene el formato Win32_LogicalDisk, el nombre de la clase generada y del archivo es "logicaldisk".For example, if the WMIClass name is in the format Win32_LogicalDisk, the generated class and file is named "logicaldisk". Si ya existe un archivo, la herramienta sobrescribe el archivo existente.If a file already exists, the tool overwrites the existing file.
/pw password/pw password Especifica la contraseña que se usa al iniciar sesión en el equipo especificado con la opción /m.Specifies the password to use when logging on to a computer specified by the /m option.
/u user name/u user name Especifica el nombre de usuario que se usa al iniciar sesión en el equipo especificado con la opción /m.Specifies the user name to use when logging on to a computer specified by the /m option.
/?/? Muestra las opciones y la sintaxis de los comandos para la herramienta.Displays command syntax and options for the tool.

ComentariosRemarks

Mgmtclassgen.exe usa el método ManagementClass.GetStronglyTypedClassCode.Mgmtclassgen.exe uses the ManagementClass.GetStronglyTypedClassCode method. Por tanto, se puede utilizar cualquier proveedor de código personalizado para generar código en lenguajes administrados distintos de C#, Visual Basic y JScript.Therefore, you can use any custom code provider to generate code in managed languages other than C#, Visual Basic, and JScript.

Tenga en cuenta que las clases generadas se enlazan al esquema para el que se generan.Note that generated classes are bound to the schema for which they are generated. Si el esquema subyacente cambia, se debe volver a generar la clase para que los cambios se reflejen en el esquema.If the underlying schema changes, you must regenerate the class if you want it to reflect changes to the schema.

La tabla siguiente muestra cómo se asignan los tipos del Modelo de información común (CIM) de WMI a los tipos de datos en una clase generada:The following table shows how WMI Common Information Model (CIM) types map to data types in a generated class:

Tipo de CIMCIM type Tipo de datos en la clase generadaData type in the generated class
CIM_SINT8CIM_SINT8 SByteSByte
CIM_UINT8CIM_UINT8 ByteByte
CIM_SINT16CIM_SINT16 Int16Int16
CIM_UINT16CIM_UINT16 UInt16UInt16
CIM_SINT32CIM_SINT32 Int32Int32
SIM_UINT32SIM_UINT32 UInt32UInt32
CIM_SINT64CIM_SINT64 Int64Int64
CIM_UINT64CIM_UINT64 UInt64UInt64
CIM_REAL32CIM_REAL32 SingleSingle
CIM_REAL64CIM_REAL64 DoubleDouble
CIM_BOOLEANCIM_BOOLEAN BooleanBoolean
CIM_StringCIM_String StringString
CIM_DATETIMECIM_DATETIME DateTime o TimeSpanDateTime or TimeSpan
CIM_REFERENCECIM_REFERENCE ManagementPathManagementPath
CIM_CHAR16CIM_CHAR16 CharChar
CIM_OBJECTCIM_OBJECT ManagementBaseObjectManagementBaseObject
CIM_IUNKNOWNCIM_IUNKNOWN ObjetoObject
CIM_ARRAYCIM_ARRAY Matriz de los objetos mencionados anteriormenteArray of the above mentioned objects

Tenga en cuenta los comportamientos siguientes cuando se genera una clase WMI:Note the following behaviors when you generate a WMI class:

  • Es posible que un método o una propiedad públicos estándar tengan el mismo nombre que un método o una propiedad existentes.It is possible for a standard public property or method to have the same name as an existing property or method. Si esto sucede, la herramienta cambia el nombre del método o de la propiedad en la clase generada para evitar conflictos de nombres.If this occurs, the tool changes the name of the property or method in the generated class to avoid naming conflicts.

  • Es posible que el nombre de un método o de una propiedad en una clase generada sea una palabra clave en el lenguaje de programación de destino.It is possible for the name of a property or method in a generated class to be a keyword in the target programming language. Si esto sucede, la herramienta cambia el nombre del método o de la propiedad en la clase generada para evitar conflictos de nombres.If this occurs, the tool changes the name of the property or method in the generated class to avoid naming conflicts.

  • En WMI, los calificadores son modificadores que contienen información para describir una clase, una instancia, una propiedad o un método.In WMI, qualifiers are modifiers that contain information to describe a class, instance, property, or method. WMI usa calificadores estándar como Read, Write y Key para describir una propiedad en una clase generada.WMI uses standard qualifiers such as Read, Write, and Key to describe a property in a generated class. Por ejemplo, una propiedad que se modifica con un calificador Read se define únicamente con un descriptor de acceso get de propiedad en la clase generada.For example, a property that is modified with a Read qualifier is defined only with a property get accessor in the generated class. Como las propiedades marcadas con el calificador Read están diseñadas para ser de solo lectura, no se define ningún descriptor de acceso set.Because a property marked with the Read qualifier is intended to be read-only, a set accessor is not defined.

  • Una propiedad numérica se puede modificar mediante los calificadores Values y ValueMaps para indicar que la propiedad solo se puede establecer en valores permisibles especificados.A numeric property can be modified by the Values and ValueMaps qualifiers to indicate that the property can be set only to specified permissible values. Con estos calificadores Values y ValueMaps se genera una enumeración y se asigna la propiedad a la enumeración.An enumeration is generated with these Values and ValueMaps and the property is mapped to the enumeration.

  • WMI utiliza el término singleton para describir una clase que solo puede tener una instancia.The WMI uses the term singleton to describe a class that can have only one instance. Por tanto, el constructor predeterminado para una clase singleton inicializará la clase en la única instancia de la misma.Therefore, the default constructor for a singleton class will initialize the class to the only instance of the class.

  • Una clase WMI puede tener propiedades que sean objetos.A WMI class can have properties that are objects. Cuando se genera una clase fuertemente tipada para este tipo de clase WMI, se debe considerar la posibilidad de generar clases fuertemente tipadas para los tipos de las propiedades de objetos incrustados.When you generate a strongly-typed class for this type of WMI class, you should consider generating strongly-typed classes for the types of the embedded object properties. Esto permitirá tener acceso a los objetos incrustados de un modo fuertemente tipado.This will allow you to access the embedded objects in a strongly-typed manner. Tenga en cuenta que existe la posibilidad de que el código generado no pueda detectar el tipo del objeto incrustado.Note that the generated code might not be able to detect the type of the embedded object. En este caso, se creará un comentario en el código generado para informar al usuario de este punto.In this case, a comment will be created in the generated code to notify you of this issue. A continuación, se puede modificar el código generado para que el tipo de la propiedad corresponda a la otra clase generada.You can then modify the generated code to type the property to the other generated class.

  • En WMI, el valor de los datos del tipo de datos CIM_DATETIME puede representar una fecha y hora específicas o un intervalo de tiempo.In WMI, the data value of the CIM_DATETIME data type can represent either a specific date and time or a time interval. Si el valor de los datos representa una fecha y hora, el tipo de datos de la clase generada es DateTime.If the data value represents a date and time, the data type in the generated class is DateTime. Si el valor de los datos representa un intervalo de tiempo, el tipo de datos de la clase generada es TimeSpan.If the data value represents a time interval, the data type in the generated class is TimeSpan.

Otra posibilidad consiste en generar una clase fuertemente tipada utilizando la extensión de administración del explorador de servidores en Visual Studio .NET.You can alternately generate a strongly-typed class using the Server Explorer Management Extension in Visual Studio .NET.

Para obtener más información sobre WMI, vea el tema sobre Instrumental de administración de Windows en la documentación de Platform SDK.For more information about WMI, see the Windows Management Instrumentation topic in the Platform SDK documentation.

EjemplosExamples

El siguiente comando genera una clase administrada en código de C# para la clase WMI Win32_LogicalDisk en el espacio de nombres Root\cimv2.The following command generates a managed class in C# code for the Win32_LogicalDisk WMI class in the Root\cimv2 namespace. La herramienta escribe la clase administrada en el archivo de código fuente en c:\disk.cs en el espacio de nombres ROOT.CIMV2.Win32.The tool writes the managed class to the source file at c:\disk.cs in the ROOT.CIMV2.Win32 namespace.

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

En el ejemplo de código siguiente se muestra la forma de utilizar mediante programación una clase generada.The following code example shows how to use a generated class programmatically. En primer lugar, se enumera una instancia de la clase y se imprime la ruta de acceso.First, an instance of the class is enumerated and the path is printed. A continuación, se crea una instancia de la clase generada que se va a inicializar con una instancia de WMI.Next, an instance of the generated class to be initialized is created with an instance of WMI. Process es la clase generada para Win32_Process y LogicalDisk es la clase generada para Win32_LogicalDisk en el espacio de nombres Root\cimv2.Process is the class generated for Win32_Process and LogicalDisk is the class generated for Win32_LogicalDisk in the Root\cimv2 namespace.

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

Vea tambiénSee also