Management Strongly Typed Class Generator-Tool (Mgmtclassgen.exe)
Mit dem Management Strongly Typed Class Generator-Tool können Sie für eine bestimmte WMI (Windows Management Instrumentation)-Klasse schnell eine früh gebundene Klasse generieren. Die generierte Klasse vereinfacht den Code, den Sie für den Zugriff auf eine Instanz der WMI-Klasse schreiben müssen.
mgmtclassgen WMIClass [options]
Argument | Beschreibung |
---|---|
WMIClass |
Die WMI (Windows Management Instrumentation)-Klasse, für die eine früh gebundene verwaltete Klasse generiert wird. |
Option | Beschreibung |
---|---|
/l language |
Gibt die Sprache an, in der die früh gebundene verwaltete Klasse generiert werden soll. Als Sprachargument können Sie CS (C#, Standardeinstellung), VB (Visual Basic), MC (Managed Extensions for C++), VJ (Visual J#) oder JS (JScript) angeben. |
/m machine |
Gibt den Computer an, auf dem sich die WMI-Klasse befindet und mit dem eine Verbindung hergestellt werden soll. Die Standardeinstellung ist der lokale Computer. |
/n path |
Gibt den Pfad zum WMI-Namespace an, der die WMI-Klasse enthält. Wenn Sie keinen Pfad angeben, wird der Code für WMIClass im Root\cimv2-Standardnamespace generiert. |
/o classnamespace |
Gibt den .NET-Namespace an, in dem die verwaltete Codeklasse generiert werden soll. Wenn Sie keinen Klassennamespace angeben, wird der Namespace aus dem WMI-Namespace und dem Schemapräfix generiert. Das Schemapräfix ist der Bestandteil des Klassennamens, der dem Unterstrich vorangeht. Für die Win32_OperatingSystem-Klasse im Root\cimv2-Namespace würde die Klasse z. B. in ROOT.CIMV2.Win32 generiert werden. |
/p filepath |
Gibt den Pfad zur Datei an, in der der generierte Code gespeichert werden soll. Wenn Sie keinen Dateipfad angeben, wird die Datei im aktuellen Verzeichnis erstellt. Die Klasse und die Datei, in der diese erstellt wird, werden anhand des WMIClass-Arguments benannt. Die Namen der Klasse und der Datei stimmen mit dem Namen der WMIClass überein. Wenn der Name der WMIClass einen Unterstrich enthält, wird der Teil des Namens nach dem Unterstrich verwendet. Wenn der Name der WMIClass z. B. das Format Win32_LogicalDisk aufweist, werden die generierte Klasse und Datei mit "logicaldisk" bezeichnet. Wenn bereits eine gleichnamige Datei vorhanden ist, wird diese überschrieben. |
/pw password |
Gibt das Kennwort für die Anmeldung an einem Computer an, der durch die /m-Option angegeben ist. |
/u Benutzername |
Gibt den Benutzernamen für die Anmeldung an einem Computer an, der durch die /m-Option angegeben ist. |
/? |
Zeigt die Befehlssyntax und die Optionen für das Tool an. |
Hinweise
Mgmtclassgen.exe verwendet die System.Management.ManagementClass.GetStronglyTypedClassCode-Methode. Sie können daher mit einem beliebigen benutzerdefinierten Codeanbieter Code in anderen verwalteten Sprachen als C#, Visual Basic und JScript generieren.
Beachten Sie, dass die generierten Klassen an das Schema gebunden sind, für das sie generiert werden. Änderungen am zugrunde liegenden Schema wirken sich auf die Klasse erst nach einer Neugenerierung aus.
In der folgenden Tabelle wird die Zuordnung von WMI Common Information Model (CIM)-Typen zu Datentypen in einer generierten Klasse dargestellt:
CIM-Typ | Datentyp in der generierten Klasse |
---|---|
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 oder TimeSpan |
CIM_REFERENCE |
ManagementPath |
CIM_CHAR16 |
Char |
CIM_OBJECT |
ManagementBaseObject |
CIM_IUNKNOWN |
Object |
CIM_ARRAY |
Array der zuvor aufgeführten Objekte |
Beachten Sie beim Generieren einer WMI-Klasse das folgende Verhalten:
Eine öffentliche Standardeigenschaft oder -methode darf den gleichen Namen wie eine vorhandene Eigenschaft oder Methode aufweisen. In diesem Fall wird der Name der Eigenschaft oder Methode in der generierten Klasse geändert, um Namenskonflikte zu vermeiden.
Der Name einer Eigenschaft oder Methode in einer generierten Klasse darf ein Schlüsselwort der Zielprogrammiersprache sein. In diesem Fall wird der Name der Eigenschaft oder Methode in der generierten Klasse geändert, um Namenskonflikte zu vermeiden.
Qualifizierer in WMI sind Modifizierer, die Informationen zum Beschreiben einer Klasse, Instanz, Eigenschaft oder Methode enthalten. In WMI werden Eigenschaften in einer generierten Klasse mithilfe von Standardqualifizierern wie Read, Write und Key beschrieben. Beispiel: Eine Eigenschaft, die mit einem Read-Qualifizierer modifiziert wird, wird in der generierten Klasse nur mit einem get-Eigenschaftenaccessor definiert. Da eine mit dem Read-Qualifizierer markierte Eigenschaft schreibgeschützt sein soll, ist kein set-Accessor definiert.
Eine numerische Eigenschaft kann durch den Values-Qualifizierer und den ValueMaps-Qualifizierer modifiziert werden, um anzugeben, dass sie nur auf bestimmte zulässige Werte festgelegt werden kann. Mit diesem Values-Qualifizierer und ValueMaps-Qualifizierer wird eine Enumerationen im allgemeinen Typsystem generiert, der die Eigenschaft zugeordnet wird.
Eine Klasse, die nur eine Instanz aufweisen darf, wird in WMI mit dem Begriff Singleton bezeichnet. Der Standardkonstruktor für eine Singleton-Klasse initialisiert die Klasse daher zur einzigen Instanz dieser Klasse.
Eine WMI-Klasse kann über Eigenschaften verfügen, bei denen es sich um Objekte handelt. Wenn Sie für eine solche WMI-Klasse eine stark typisierte Klasse generieren, empfiehlt es sich, für die Typen der eingebetteten Objekteigenschaften stark typisierte Klassen zu generieren. Dies ermöglicht Ihnen den stark typisierten Zugriff auf die eingebetteten Objekte. Beachten Sie, dass der generierte Code den Typ des eingebetteten Objekts möglicherweise nicht erkennen kann. In einem solchen Fall wird im generierten Code ein Kommentar erstellt, in dem Sie auf das Problem hingewiesen werden. Sie können den generierten Code dann ändern, um den Typ der Eigenschaft an den der anderen generierten Klassen anzugleichen.
Der Datenwert des CIM_DATETIME-Datentyps kann in WMI entweder einen bestimmten Zeitpunkt (Datum und Uhrzeit) oder ein Zeitintervall darstellen. Wenn der Datenwert einen Zeitpunkt (Datum und Uhrzeit) darstellt, ist der Datentyp in der generierten Klasse DateTime. Wenn der Datenwert ein Zeitintervall darstellt, ist der Datentyp in der generierten Klasse TimeSpan.
Es besteht auch die Möglichkeit, mithilfe der Server Explorer Management Extension (Verwaltungserweiterung für Server-Explorer) in Visual Studio .NET eine stark typisierte Klasse zu generieren.
Weitere Informationen über WMI finden Sie unter Windows Management Instrumentation (WMI) in .NET Framework und im Thema Windows Management Instrumentation in der Dokumentation zum Plattform-SDK.
Beispiele
Der folgende Befehl generiert eine verwaltete Klasse in C#-Code für die Win32_LogicalDisk-WMI-Klasse im Root\cimv2-Namespace. Das Tool schreibt die verwaltete Klasse in die Quelldatei, die sich unter c:\disk.cs im ROOT.CIMV2.Win32-Namespace befindet.
mgmtclassgen Win32_LogicalDisk /n root\cimv2 /l CS /p c:\disk.cs
Im folgenden Codebeispiel wird die programmgesteuerte Verwendung einer generierten Klasse veranschaulicht. Zunächst wird eine Instanz der Klasse aufgelistet und der Pfad ausgegeben. Anschließend wird eine Instanz der generierten Klasse, die initialisiert werden soll, mit einer Instanz von WMI erstellt. Dabei ist Process
die für Win32_Process und LogicalDisk
die für Win32_LogicalDisk im Root\cimv2-Namespace generierte Klasse.
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);
}
}
Siehe auch
Referenz
.NET Framework-Tools
System.Management Namespace
System.Management.ManagementClass.GetStronglyTypedClassCode
System.CodeDom.Compiler.CodeDomProvider Class
SDK-Eingabeaufforderung
Weitere Ressourcen
Windows Management Instrumentation (WMI) in .NET Framework