厳密型クラス ジェネレータ (Mgmtclassgen.exe)

厳密型クラス ジェネレータ (Mgmtclassgen.exe) ツールを使用すると、指定した WMI (Windows Management Instrumentation) クラスに対して、事前バインディングされたマネージ クラスをすばやく生成できます。生成されたクラスを使用すると、WMI クラスのインスタンスにアクセスするために書く必要のあるコードを簡略化できます。

mgmtclassgen WMIClass [options] 
引数 説明

WMIClass

事前バインディングしたマネージ クラスを生成する対象の WMI クラスです。

オプション 説明

/l language

事前バインディングされたマネージ クラスの生成に使用する言語を指定します。引数 language として CS (C#、既定値)、VB (Visual Basic)、MC (マネージ C++)、VJ (Visual J#)、または JS (JScript) を指定できます。

/m machine

WMI クラスが常駐する、接続先のコンピュータを指定します。既定値はローカル コンピュータです。

/n path

WMI クラスが含まれている WMI 名前空間へのパスを指定します。このオプションを指定しない場合、このツールは既定の Root\cimv2 名前空間に WMIClass のコードを生成します。

/o classnamespace

マネージ コード クラスを生成する先の .NET 名前空間を指定します。このオプションを指定しない場合、このツールは WMI 名前空間およびスキーマ プリフィックスを使用して名前空間を指定します。スキーマ プリフィックスはクラス名の一部で、アンダースコア (_) 文字の前に付きます。たとえば、Root\cimv2 名前空間内の Win32_OperatingSystem クラスの場合、このツールは ROOT.CIMV2.Win32 にクラスを生成します。

/p filepath

生成されたコードを保存するファイルへのパスを指定します。このオプションを指定しない場合、このツールは現在のディレクトリにファイルを作成します。WMIClass 引数を使用して生成したクラスと、そのクラスを保存したファイルには名前が付けられます。クラスおよびファイルの名前は、WMIClass の名前と同じです。WMIClass にアンダースコア (_) 文字が含まれている場合は、アンダースコア (_) 文字の後に続く、クラス名の一部が使用されます。たとえば、WMIClass 名が Win32_LogicalDisk という形式の場合、生成されたクラスおよびファイルには "logicaldisk" という名前が付けられます。ファイルが既に存在している場合は、既存のファイルが上書きされます。

/pw password

/m オプションで指定したコンピュータにログオンするときに使用するパスワードを指定します。

/u user name

/m オプションで指定したコンピュータにログオンするときに使用するユーザー名を指定します。

/?

このツールのコマンド構文とオプションを表示します。

解説

Mgmtclassgen.exe は、System.Management.ManagementClass.GetStronglyTypedClassCode メソッドを使用します。したがって、任意のカスタム コード プロバイダを使用して、C#、Visual Basic、および JScript 以外のマネージ言語でコードを生成できます。

生成されたクラスは、それらのクラスを生成する目的となったスキーマにバインドされます。基になるスキーマが変更された場合に、その変更をこのスキーマに反映するには、クラスを生成し直す必要があります。

WMI CIM (Common Information Model) 型の、生成されたクラスのデータ型への割り当てを次の表に示します。

CIM 型 生成したクラスのデータ型

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

ブール型

CIM_String

文字列型

CIM_DATETIME

DateTime または TimeSpan

CIM_REFERENCE

ManagementPath

CIM_CHAR16

文字型 (Char)

CIM_OBJECT

ManagementBaseObject

CIM_IUNKNOWN

オブジェクト型 (Object)

CIM_ARRAY

上記のオブジェクトの配列

WMI クラスを生成する場合は、次の動作に注意してください。

  • 標準パブリック プロパティまたはメソッドの名前と既存のプロパティまたはメソッドの名前が同じになる可能性があります。このような事態が発生した場合、このツールは生成したクラスのプロパティまたはメソッドの名前を変更して、名前付けの競合を回避します。

  • 生成したクラスのプロパティまたはメソッドの名前がプログラミング言語のキーワード名と同じになる可能性があります。このような事態が発生した場合、このツールは生成したクラスのプロパティまたはメソッドの名前を変更して、名前付けの競合を回避します。

  • WMI では、修飾子は、クラス、インスタンス、プロパティ、またはメソッドを説明する情報を含む修飾子となります。WMI は、ReadWriteKey などの標準の修飾子を使用して、生成したクラスのプロパティについて説明します。たとえば、Read 修飾子で修飾されたプロパティは、生成したクラスではプロパティ get アクセサだけを伴って定義されます。Read 修飾子でマークされたプロパティは読み取り専用であるため、set アクセサは定義されません。

  • 数値プロパティを Values 修飾子および ValueMaps 修飾子によって修飾すると、このプロパティには、指定した許容値しか設定できないことを示すことができます。共通型システムの列挙型は、このような Values および ValueMaps を使用して生成され、このプロパティは列挙体に割り当てられます。

  • WMI では、インスタンスを 1 つだけを持つことのできるクラスを説明するために、シングルトンという用語を使用します。シングルトン クラスの既定のコンストラクタは、クラスをそのクラスの唯一のインスタンスに初期化します。

  • WMI クラスは、オブジェクトであるプロパティを持つ場合があります。そのような型の WMI クラスに対して、厳密に型指定されたクラスを生成する場合は、埋め込まれたオブジェクト プロパティの型それぞれに対して厳密に型指定されたクラスを生成することを検討してください。これにより、厳密に型指定する方法で、埋め込まれたオブジェクトにアクセスできるようになります。生成されたコードが、埋め込まれたオブジェクトの型を検出できない場合もあります。このような場合は、生成されたコード内に、その旨をユーザーに通知するコメントが作成されます。これに応じて、生成された他のクラスをプロパティの型として指定するように、生成したコードを変更できます。

  • WMI では、CIM_DATETIME データ型のデータ値は、特定の日時または時間間隔を表すことができます。データ値が日時を表す場合、生成されたクラスのデータ型は DateTime です。データ値が時間間隔を表す場合、生成されたクラスのデータ型は TimeSpan です。

Visual Studio .NET のサーバー エクスプローラ管理拡張機能を使用して、厳密に型指定されクラスを生成することもできます。

WMI の詳細については、「Windows Management Instrumentation (WMI) in .NET Framework」およびプラットフォーム SDK の「Windows Management Instrumentation」のトピックを参照してください。

Root\cimv2 名前空間内の Win32_LogicalDisk WMI クラスに対してマネージ クラスを C# コードで生成するコマンドを次に示します。このツールは、ROOT.CIMV2.Win32 名前空間内の c:\disk.cs にあるソース ファイルにマネージ クラスを書き込みます。

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

生成したクラスをプログラムによって使用する方法を次のコード例に示します。まず、クラスのインスタンスが列挙され、パスが出力されます。次に、初期化の対象となる生成したクラスのインスタンスが、WMI のインスタンスを使用して作成されます。Root\cimv2 名前空間において ProcessWin32_Process に対して生成されたクラスであり、LogicalDiskWin32_LogicalDisk に対して生成されたクラスです。

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

参照

関連項目

.NET Framework ツール
System.Management Namespace
System.Management.ManagementClass.GetStronglyTypedClassCode
System.CodeDom.Compiler.CodeDomProvider Class
SDK のコマンド プロンプト

その他の技術情報

Windows Management Instrumentation (WMI) in .NET Framework