Hallo
Heute hab ich mich etwas mit dem Thema WMI beschäftigt.
Ich möchte ein Beispiel, eine Funktion vorstellen, die sich sehr einfach anpassen lässt.
An die Funktion wird ein String als Wert übergeben (z.B. der Hostname) und die ausgelesenen Werte werden als List<string> zurück gegeben, die man dann z.B. an ein Dataset übergeben kann.
————————————————————————————————————
// Funktion: — WMINetworkAdapterConfigurationIP() —
// Ruft folgende Komponenten aus dem NetworkAdapterConfiguration ab, wo IP=Enable ist:
// Description, IP-Add, MAC-Add, Gateway, SubnetMask
// Übergabewert ist der Hostname von dem die Werte abgerufen werden sollen
// Rückgabewert ist ein Array mit X Feldern, die die ausgelesenen Werte in der Oben angegebenen Reihenfolge enthalten
public List<string> WMINetworkAdapterConfigurationIP(string hname)
{
ConnectionOptions options = new ConnectionOptions();
options.Username = “username”;
options.Password = “password”;
ManagementScope scope = new ManagementScope(“\\” + hname + “\root\cimv2”, options);
// NetworkAdapterConfig auslesen
SelectQuery selectQuery = new SelectQuery(“Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE”);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, selectQuery);
string[] sqlname = { “Description”, “IPAddress”, “MACAddress”, “DefaultIPGateway”, “IPSubnet” };
List<string> zurueck = new List<string>();
foreach (ManagementObject disk in searcher.Get())
{
for (int i = 0; i < sqlname.Count(); i++)
{
if (disk[sqlname[i]] == null)
{
zurueck.Add(“–“);
}
else if (disk[sqlname[i]].ToString() == “System.String[]”)
{
string[] arrIP = (string[])(disk[sqlname[i]]);
zurueck.Add(arrIP[0]);
}
else
{
zurueck.Add(disk[sqlname[i]].ToString());
}
}
}
return zurueck;
}
————————————————————————————————————
Nur die gelb markierten Bereichen müssen verändert werden um die Abfrage an individuelle Bedürfnisse anzupassen.
Der Aufruf der Funktion könnte wir folgt aussehen:
————————————————————————————————————
// Die “LISTEN” für das table “NETWORK” anlegen
List<string> ColNameNetwork = new List<string>();
List<string> RoValueNetwork = new List<string>();
// NetworkAdapterConfiguration Daten abrufen
List<string> NetAdaptConf = new List<string>();
NetAdaptConf = WMINetworkAdapterConfigurationIP(hostn);
RoValueNetwork.AddRange(NetAdaptConf);
string[] colnameAdaptConf = { “DESCRIPTION”, “IP”, “MACADD”, “GATEWAY”, “SUBNETADD” };
foreach (string colheadname in colnameAdaptConf)
{
ColNameNetwork.Add(colheadname);
}
// *******************************************************************************
// ***** Daten in das DataSet “DS_MWS” übergeben mit dem Table “NETWORK” *****
//*****************************************************************************
// Das DataTable “Network” anlegen
DataTable DaTaNetwork = new DataTable(“Network”);
for (int x = 0; x < ColNameNetwork.Count; x++)
{
DaTaNetwork.Columns.Add(ColNameNetwork[x], typeof(System.String));
}
// Eine neue Zeile in der Table erzeugen
DataRow DaRoNetwork = DaTaNetwork.NewRow();
// Den Spalten der neuen Zeile Werte zuweisen
for (int y = 0; y < RoValueNetwork.Count; y++)
{
DaRoNetwork[y] = RoValueNetwork[y];
}
// Die neue Zeile mit allen Daten in das DataTable schreiben
DaTaNetwork.Rows.Add(DaRoNetwork);
// *********************************
// Ein neues DataSet DS_MWS erzeugen
// *********************************
DataSet DaSe = new DataSet(“DS_MWS”);
// Das Table NETWORK in das DataSet schreiben
DaSe.Tables.Add(DaTaNetwork);
————————————————————————————————————
Zum Schluss möchte ich das DataSet noch in eine XML-Datei schreiben.
————————————————————————————————————
Vielleicht hat Euch mein kleines Beispiel gefallen.
Der Code ist noch nicht optimal. Ich denke man kann ihn aber nutzen und auf seine Bedürfnisse anpassen.
Hab Ihr noch Fragen oder findet Ihr Fehler, dann schreib doch einfach etwas Nettes im Anschluss an diesen Post.
Viele Grüße
Thomas