Mgmtclassgen.exe (Management Strongly Typed Class Generator)Mgmtclassgen.exe (Management Strongly Typed Class Generator)

Lo strumento Generatore di classi di gestione fortemente tipizzate consente di generare velocemente una classe gestita ad associazione precoce per una specifica classe WMI (Windows Management Instrumentation, Strumentazione gestita Windows).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. L'utilizzo della classe generata semplifica la scrittura del codice per l'accesso a un'istanza della classe WMI.The generated class simplifies the code you must write to access an instance of the WMI class.

SintassiSyntax

mgmtclassgen   
WMIClass [options]   
ArgomentoArgument DescrizioneDescription
classeWMIWMIClass Classe WMI per la quale generare una classe gestita ad associazione precoce.The Windows Management Instrumentation class for which to generate an early-bound managed class.
OpzioneOption DescrizioneDescription
/l linguaggio/l language Specifica il linguaggio in cui generare la classe gestita ad associazione precoce.Specifies the language in which to generate the early-bound managed class. È possibile specificare CS (C#; impostazione predefinita), VB (Visual Basic), MC (C++) o JS (JScript) come argomento del linguaggio.You can specify CS (C#; default), VB (Visual Basic), MC (C++), or JS (JScript) as the language argument.
/m computer/m machine Specifica il computer al quale eseguire la connessione ovvero quello sul quale risiede la classe WMI.Specifies the computer to connect to, where the WMI class resides. Il valore predefinito è il computer locale.The default is the local computer.
/n percorso/n path Specifica il percorso dello spazio dei nomi WMI contenente la classe WMI.Specifies the path to the WMI namespace that contains the WMI class. Se non si specifica questa opzione, lo strumento genera codice per classeWMI nello spazio dei nomi Root\cimv2 predefinito.If you do not specify this option, the tool generates code for WMIClass in the default Root\cimv2 namespace.
/o spazionomiclasse/o classnamespace Specifica lo spazio dei nomi .NET nel quale generare la classe di codice gestito.Specifies the .NET namespace in which to generate the managed code class. Se non si specifica questa opzione, lo spazio dei nomi verrà generato utilizzando lo spazio dei nomi WMI e il prefisso dello schema.If you do not specify this option, the tool generates the namespace using the WMI namespace and the schema prefix. Il prefisso dello schema è la parte del nome della classe che precede il carattere di sottolineatura.The schema prefix is the part of the class name preceding the underscore character. Ad esempio, per la classe Win32_OperatingSystem nello spazio dei nomi Root\cimv2, lo strumento genera la classe in 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 percorsofile/p filepath Specifica il percorso del file in cui salvare il codice generato.Specifies the path to the file in which to save the generated code. Se non si specifica questa opzione, il file verrà creato nella directory corrente.If you do not specify this option, the tool creates the file in the current directory. Denomina la classe e il file in cui viene generata la classe con l'argomento classeWMI.It names the class and file in which it generates the class using the WMIClass argument. Il nome della classe e del file è uguale al nome di classeWMI.The name of the class and the file are the same as the name of the WMIClass. Se il nome di classeWMI include un carattere di sottolineatura, lo strumento usa la parte del nome della classe che segue tale carattere.If WMIClass contains an underscore character, the tool uses the part of the class name following the underscore character. Ad esempio, se il nome di classeWMI è nel formato Win32_LogicalDisk, il nome della classe e del file generati sarà "logicaldisk".For example, if the WMIClass name is in the format Win32_LogicalDisk, the generated class and file is named "logicaldisk". Se esiste già un file con tale nome, verrà sovrascritto.If a file already exists, the tool overwrites the existing file.
/pw password/pw password Specifica la password da usare per l'accesso a un computer specificato dall'opzione /m.Specifies the password to use when logging on to a computer specified by the /m option.
/u nomeutente/u user name Specifica il nome utente da usare per l'accesso a un computer specificato dall'opzione /m.Specifies the user name to use when logging on to a computer specified by the /m option.
/?/? Visualizza la sintassi e le opzioni di comando dello strumento.Displays command syntax and options for the tool.

NoteRemarks

Mgmtclassgen.exe utilizza il metodo ManagementClass.GetStronglyTypedClassCode.Mgmtclassgen.exe uses the ManagementClass.GetStronglyTypedClassCode method. È possibile pertanto utilizzare un provider di codice personalizzato per generare codice in linguaggi gestiti diversi da C#, Visual Basic e JScript.Therefore, you can use any custom code provider to generate code in managed languages other than C#, Visual Basic, and JScript.

Le classi generate sono associate allo schema per il quale sono state generate.Note that generated classes are bound to the schema for which they are generated. Quando lo schema sottostante una classe viene modificato è necessario generare nuovamente la classe se si desidera che essa rispecchi le modifiche dello schema.If the underlying schema changes, you must regenerate the class if you want it to reflect changes to the schema.

Nella tabella riportata di seguito viene illustrato il mapping tra i tipi CIM (Common Information Model) WMI e i tipi dati inclusi in una classe generata.The following table shows how WMI Common Information Model (CIM) types map to data types in a generated class:

Tipo CIMCIM type Tipo di dati incluso nella classe generataData 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 OggettoObject
CIM_ARRAYCIM_ARRAY Matrice degli oggetti precedentiArray of the above mentioned objects

Quando viene generata una classe WMI può accadere quanto segue:Note the following behaviors when you generate a WMI class:

  • Una proprietà o un metodo pubblico standard può avere lo stesso nome di una proprietà o di un metodo esistente.It is possible for a standard public property or method to have the same name as an existing property or method. In tal caso il nome della proprietà o del metodo nella classe generata verrà automaticamente cambiato per evitare conflitti di denominazione.If this occurs, the tool changes the name of the property or method in the generated class to avoid naming conflicts.

  • Il nome di una proprietà o di un metodo in una classe generata può essere una parola chiave nel linguaggio di programmazione di destinazione.It is possible for the name of a property or method in a generated class to be a keyword in the target programming language. In tal caso il nome della proprietà o del metodo nella classe generata verrà automaticamente cambiato per evitare conflitti di denominazione.If this occurs, the tool changes the name of the property or method in the generated class to avoid naming conflicts.

  • In WMI un qualificatore è un modificatore contenente informazioni per descrivere una classe, un'istanza, una proprietà o un metodo.In WMI, qualifiers are modifiers that contain information to describe a class, instance, property, or method. Per descrivere una proprietà in una classe generata, WMI usa qualificatori standard quali Read, Write e Key.WMI uses standard qualifiers such as Read, Write, and Key to describe a property in a generated class. Ad esempio, una proprietà modificata con il qualificatore Read viene definita solo con una funzione di accesso get della proprietà nella classe generata.For example, a property that is modified with a Read qualifier is defined only with a property get accessor in the generated class. Poiché una proprietà contrassegnata dal qualificatore Read è di sola lettura, non viene definita alcuna funzione di accesso set.Because a property marked with the Read qualifier is intended to be read-only, a set accessor is not defined.

  • Una proprietà numerica può essere modificata tramite i qualificatori Values e ValueMaps per indicare che la proprietà può essere impostata solo su specifici valori consentiti.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. Viene generata un'enumerazione con i qualificatori Values e ValueMaps e viene eseguito il mapping della proprietà all'enumerazione.An enumeration is generated with these Values and ValueMaps and the property is mapped to the enumeration.

  • La strumentazione WMI utilizza il termine Singleton per descrivere una classe che può avere una sola istanza.The WMI uses the term singleton to describe a class that can have only one instance. Il costruttore predefinito per una classe Singleton, pertanto, inizializzerà la classe per l'unica istanza della classe.Therefore, the default constructor for a singleton class will initialize the class to the only instance of the class.

  • Le proprietà di una classe WMI possono essere oggetti.A WMI class can have properties that are objects. Quando si genera una classe fortemente tipizzata per questo tipo di classe WMI, valutare di generare classi fortemente tipizzate per i tipi delle proprietà oggetti incorporati.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. Sarà così possibile eseguire un accesso fortemente tipizzato agli oggetti incorporati.This will allow you to access the embedded objects in a strongly-typed manner. Il codice generato potrebbe non essere in grado di individuare il tipo dell'oggetto incorporato.Note that the generated code might not be able to detect the type of the embedded object. In tal caso nel codice generato verrà creato un commento che notifica il problema.In this case, a comment will be created in the generated code to notify you of this issue. Sarà quindi possibile modificare il codice generato per tipizzare la proprietà sull'altra classe generata.You can then modify the generated code to type the property to the other generated class.

  • In WMI il valore dei dati del tipo di dati CIM_DATETIME può rappresentare una specifica data e ora o un intervallo di tempo.In WMI, the data value of the CIM_DATETIME data type can represent either a specific date and time or a time interval. Se il valore dei dati rappresenta una data e un'ora, il tipo di dati nella classe generata è DateTime.If the data value represents a date and time, the data type in the generated class is DateTime. Se il valore dei dati rappresenta un intervallo di tempo, il tipo di dati nella classe generata è TimeSpan.If the data value represents a time interval, the data type in the generated class is TimeSpan.

In alternativa è possibile generare una classe fortemente tipizzata utilizzando l'estensione di gestione per Esplora server di Visual Studio .NET.You can alternately generate a strongly-typed class using the Server Explorer Management Extension in Visual Studio .NET.

Per altre informazioni su WMI, vedere l'argomento Windows Management Instrumentation (Strumentazione gestione Windows (WMI)) nella documentazione di Platform SDK.For more information about WMI, see the Windows Management Instrumentation topic in the Platform SDK documentation.

EsempiExamples

Il comando seguente genera una classe gestita in codice C# per la classe WMI Win32_LogicalDisk nello spazio dei nomi Root\cimv2.The following command generates a managed class in C# code for the Win32_LogicalDisk WMI class in the Root\cimv2 namespace. Lo strumento scrive la classe gestita nel file di origine che si trova nel percorso c:\disk.cs dello spazio dei nomi 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  

Nel codice di esempio riportato di seguito viene illustrato come utilizzare una classe generata a livello di programmazione.The following code example shows how to use a generated class programmatically. Innanzitutto viene enumerata un'istanza della classe e viene visualizzato il percorso.First, an instance of the class is enumerated and the path is printed. In seguito, un'istanza della classe generata da inizializzare viene creata con un'istanza di WMI.Next, an instance of the generated class to be initialized is created with an instance of WMI. Process è la classe generata per Win32_Process e LogicalDisk è la classe generata per Win32_LogicalDisk nello spazio dei nomi 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);  
   }  
}  

Vedere ancheSee Also

System.Management
ManagementClass.GetStronglyTypedClassCode
System.CodeDom.Compiler.CodeDomProvider
StrumentiTools
Prompt dei comandiCommand Prompts