WMI Abfragen als Funktion gibt ein List zurück – C# Sharp – IP MAC Gateway Description

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

         scope.Connect();


            // 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.

————————————————————————————————————

 
                // *************************
            // DataSet als XML speichern
            // *************************
            string XMLpath = @”C:tempUT-MWS-Inventary”;
 
            if (Directory.Exists(XMLpath) == false)
            {
                Directory.CreateDirectory(XMLpath);
            }
 
            DaSe.WriteXml(XMLpath + “MWS-Inventary.xml”);
 
————————————————————————————————————
 
 

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

Schreibe einen Kommentar