Laden...

WMI (remote Anfragen)

Erstellt von schaedld vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.732 Views
schaedld Themenstarter:in
1.433 Beiträge seit 2006
vor 17 Jahren
WMI (remote Anfragen)

Hallo zusammen
Da ich die DataTable nun begriffen habe, wollte ich meine WMI Abfragen ein bisschen genereller gestalten, sodass ich x ein Host auswählen kann. Leider funktioniert dies nicht ganz, ich bekomme zwar keine Error-Meldung, aber auch keine Ergebnisse obwohl ich weiss dass da welche vorhanden sind:



protected void WMIBtn_Click(object sender, EventArgs e)
    {
        /* Beschreibung des Source Codes
        * 1. der WMI Queri ruft die angegebenen Parameter über ein Select Queryim WMI Repository auf
        * 2. Der ObjectSearcher ruft im WMI-Repository alle Objekte auf die dem Query entsprechen
        * 3. Die ManagementCollection stellt das Ergebnis das
        * 4. Eine Textbox für den Input wird erstellt, damit ein eingegebener Wert abgefragt werden kann
        * 5. Der Button führt dann die Abfrage aus
        * 6. Zusätzlich muss eine Verbindung aufgebaut werden.
        */

        string WMIHost;
        string Loginna;
        string Loginpw;

        Loginna = WMIUserName.Text;
        Loginpw = WMIUserPass.Text;

        WMIHost = WMITxt.Text;
        string Scopepath = "\\" + WMIHost + "\\root\\CIMV2\\";

        ConnectionOptions WMIConnect = new ConnectionOptions();

        WMIConnect.Username = Loginna;
        WMIConnect.Password = Loginpw;

        ManagementScope WMIMgmtScope = new ManagementScope();
        WMIMgmtScope = new ManagementScope(WMIHost + (new ManagementPath("\\root\\CIMV2\\")), WMIConnect);


        /* Damit die Daten nicht von einer DB kommen müssen wird eine DataTable im Arbeitsspeicher generiert
         * 1. Die DataTable wird initiiert und der Name wird vergeben
         * 2. Die Spalten müssen festgelegt werden, im ersten Schritt mit null initiiert und in einem weiteren
         *    Schritt werden den einzelnen Spalten Überschriften vergeben.
         * 3. Die DataRow muss dann auch mit null initiiert werden.
         * 4. Damit alle Objekte des ManagementObjectCollection als Row angelegt werden, wird die Wenge
         *    mit einer foreach-Schleife für die sequentielle Hinzufügung von Rows verwendet.
         * 5. Die Rows müssen Namen aufweisen, diese müssen dann im DataView angegeben werden
         * 6. Ist die DataTable erstellt so wird sie mit der Default View an ein DataGrid o. ä. gebunden.
         * 7. Danach wird das Grid selbst an die Datenbindung gebunden.
         */

        String WMIQuery = "Select EventCode, SourceName, ComputerName, Message from Win32_NTLogEvent where SourceName='DCOM'";
        ManagementObjectSearcher WMISrch = new ManagementObjectSearcher(WMIQuery);
        ManagementObjectCollection WMIMenge = WMISrch.Get();

        DataTable WMIDataTable = new DataTable("WMI Ergebnisse");
        DataColumn WMIDataColu = null;
        DataRow WMIDataRow = null;

        WMIDataColu = WMIDataTable.Columns.Add("Event Code");
        WMIDataColu = WMIDataTable.Columns.Add("ComputerNa");
        WMIDataColu = WMIDataTable.Columns.Add("Quelle");
        WMIDataColu = WMIDataTable.Columns.Add("Message");


        foreach (ManagementObject man in WMIMenge)
        {
            WMIDataRow = WMIDataTable.NewRow();
            WMIDataRow["Event Code"] = man["EventCode"];
            WMIDataRow["ComputerNa"] = man["ComputerName"];
            WMIDataRow["Quelle"] = man["SourceName"];
            WMIDataRow["Message"] = man["Message"];
            WMIDataTable.Rows.Add(WMIDataRow);
        }

        GridView1.DataSource = WMIDataTable.DefaultView;
        GridView1.DataBind(); 
    }
}


Nun vielleicht hab ich mit der Notation einen Fehler, habe aber leider nichts gefunden, weder im Web noch hier im Forum. Danke für eure Hilfe.

Gruss
Dani

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

4.221 Beiträge seit 2005
vor 17 Jahren

ManagementObjectSearcher WMISrch = new ManagementObjectSearcher(WMIMgmtScope, WMIQuery);

Du hast den Scope nicht an de Searcher übergeben...

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

schaedld Themenstarter:in
1.433 Beiträge seit 2006
vor 17 Jahren

eigentlich logisch ich Dödel =)

Musste aber mein Query ändern und nicht vom Typ String...


        ObjectQuery  WMIQuery = new ObjectQuery("Select EventCode, SourceName, ComputerName, Message from Win32_NTLogEvent where SourceName='DCOM'");
        ManagementObjectSearcher WMISrch = new ManagementObjectSearcher(WMIMgmtScope, WMIQuery);
        ManagementObjectCollection WMIMenge = WMISrch.Get();

Ich krieg aber kein Ergebnis raus, obwohl ich eine bekannte Fehlerquelle (noch) hardvercodet angebe DCOM. Ist sonst alles in Ordnung. Notation etc.?

Danke für eure Hilfe.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

L
667 Beiträge seit 2004
vor 17 Jahren

Läuft der gepostete Code in einem eigenen Thread ? Falls ja, kann es sein, dass eine Exception auftritt, über die man dann von .NET nicht informiert wird. Ist nur so eine Idee...

"It is not wise to be wise" - Sun Tzu

schaedld Themenstarter:in
1.433 Beiträge seit 2006
vor 17 Jahren

Nicht dass ich wüsste. Die Abfrage liefert mir leider keine Ergebnisse zurück, ich weiss aber dass da welche sein müssen....

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

schaedld Themenstarter:in
1.433 Beiträge seit 2006
vor 17 Jahren

Moment... wenn ich den Button drücke dann macht er ja einen Reload und leert mir dann die Felder.

Kann es sein, dass er die Werte nicht mitnimmt?

Load Page -> gebe meine Angaben ein -> Submit -> verliert meine Angaben?

Wie würde ich dass den am Besten bewerkstelligen, wenn dies das Problem sein könnte...

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

schaedld Themenstarter:in
1.433 Beiträge seit 2006
vor 17 Jahren

Wie würde ich dann, wenn meine These stimmt, die Werte vor dem Submit wieder abfragen können, wenn die Page wieder geladen wird (mit den Ergebnissen).

Session oder Cookies? oder bin auf dem Holzweg?

Danke für die Unterstützung 👍

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt