Mgmtclassgen.exe (管理強類型類別產生器)

[管理強類型類別產生器] 工具可快速地為指定的 Windows Management Instrumentation (WMI) 類別產生早期繫結 Managed 類別。 產生的類別會將為存取 WMI 類別之執行個體所撰寫的程式碼加以簡化。

語法

mgmtclassgen
WMIClass [options]
Argument 描述
WMIClass 要產生早期繫結 Managed 類別的 Windows Management Instrumentation 類別。
選項 描述
/l語言 指定要用來產生早期繫結 Managed 類別的語言。 你可以指定 CS (C#;預設)、 VB (Visual Basic)、 MC (C++)或 JS (JScript)作為語言參數。
/m電腦 指定要連接的電腦,其中內含 WMI 類別。 預設是本機電腦。
/n路徑 指定包含 WMI 類別之 WMI 命名空間的路徑。 如果沒有指定這個選項,則工具預設會產生 Root\cimv2 命名空間之 WMIClass 的程式碼。
/oclassnamespace 指定要產生 Managed 程式碼類別的 .NET 命名空間。 如果沒有指定這個選項,則工具會產生使用 WMI 命名空間和結構描述前置詞的命名空間。 結構描述前置詞是位在底線字元前之類別名稱的一部分。 例如,針對 Root\cimv2 命名空間中的 Win32_OperatingSystem 類別,工具會在 ROOT.CIMV2.Win32 中產生類別。
/pfilepath 指定用來儲存所產生之程式碼的檔案路徑。 如果沒有指定這個選項,工具會將檔案建立在目前的目錄下。 工具會使用 WMIClass 引數來為其產生類別的類別和檔案命名。 類別和檔案的名稱與 WMIClass 的名稱 相同。 如果 WMIClass 包含底線字元,此工具會使用底線字元後面的類別名稱部分。 例如,如果 WMIClass 名稱的格式為 Win32_LogicalDisk,則產生的類別和檔案將會命名為 "logicaldisk"。 如果檔案已存在,工具會覆寫現有的檔案。
/pw密碼 透過 /m 選項指定登入電腦時要使用的密碼。
/u用戶名稱 透過 /m 選項指定登入電腦時要使用的使用者名稱。
/? 顯示工具的命令語法和選項。

備註

Mgmtclassgen.exe 會使用 ManagementClass.GetStronglyTypedClassCode 方法。 因此,您可以使用任何自訂程式碼提供者來產生 Managed 語言 (不是 C#、Visual Basic 和 JScript) 的程式碼。

請注意,產生的類別會繫結至為其所產生的結構描述。 當基礎結構描述改變時,若要反映結構描述的這些改變就必須重新產生類別。

下表顯示 WMI 通用訊息模型 (Common Information Model,CIM) 類型如何對應至所產生類別中的資料類型:

CIM 類型 所產生之類別中的資料類型
CIM_SINT8 SByte
CIM_UINT8 位元組
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 String
CIM_DATETIME DateTimeTimeSpan
CIM_REFERENCE ManagementPath
CIM_CHAR16 Char
CIM_OBJECT ManagementBaseObject
CIM_IUNKNOWN Object
CIM_ARRAY 上述物件的陣列

請注意下列在產生 WMI 類別時的行為:

  • 標準公用屬性或方法有可能和現有屬性或方法的名稱相同。 當此情況發生時,工具會變更在所產生之類別中屬性或方法的名稱以避免命名衝突。

  • 所產生之類別中屬性或方法的名稱有可能是目標程式語言的關鍵字。 當此情況發生時,工具會變更在所產生之類別中屬性或方法的名稱以避免命名衝突。

  • 在 WMI 中,限定詞為修飾詞,其中包含說明類別、執行個體、屬性或方法的資訊。 WMI 使用標準的限定符,如 ReadWriteKey 來描述產生類別中的屬性。 例如,一個以 Read 限定符修改的屬性,僅在產生的類別中以屬性 get 存取者定義。 由於標有 Read 限定符的屬性是設計為唯讀,因此 set 未定義存取器。

  • 數值屬性可由 ValuesValueMaps 限定符修改,表示該屬性只能設定為指定的允許值。 用這些 ValuesValueMaps 生成一個枚舉,並將性質映射到枚舉。

  • WMI 使用單一 (Singleton) 這個詞彙來說明只能有一個執行個體的類別。 因此,單一 (Singleton) 類別的無參數建構函式會將類別初始化為該類別的唯一執行個體。

  • WMI 類別可以擁有物件的屬性。 當您為這種類型的 WMI 類別產生強型別類別時,您應該考慮為內嵌物件屬性的類型產生強型別類別。 這可讓您以強型別的方式存取內嵌物件。 請注意,產生的程式碼可能無法偵測內嵌物件的類型。 在這個情況下,會在產生的程式碼中建立註解以告知您這個問題。 接著,您可以將所產生程式碼的屬性類型修改為其他所產生類別的屬性類型。

  • WMI 中,CIM_DATETIME 資料類型的資料值可表示特定的日期和時間,或表示時間間隔。 如果資料值代表日期和時間,所產生類別中的資料類型就會是 DateTime。 如果資料值代表時間間隔,則所產生類別中的資料類型就會是 TimeSpan

您也可以使用 Visual Studio .NET 中的 [伺服器總管管理延伸模組] 來產生強型別類別。

如需 WMI 的詳細資訊,請參閱 Platform SDK 說明文件中的 Windows Management Instrumentation 主題。

範例

下列命令會在 Root\cimv2 命名空間中產生 Win32_LogicalDisk WMI 類別的 Managed 類別 (以 C# 程式碼撰寫)。 工具會將 Managed 類別寫入 c:\disk.cs 的原始程式檔,放在 ROOT.CIMV2.Win32 命名空間中。

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

下列程式碼範例顯示如何以程式設計方式使用產生的類別。 首先,列舉類別的執行個體並印出路徑。 接下來,以 WMI 的執行個體建立要初始化所產生類別的執行個體。 Process 是為 Win32_Process 產生的類別,LogicalDisk 則是為 Root\cimv2 命名空間中 Win32_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);
   }
}

另請參閱