ManagementObjectCollection in ManagementObject (array) wandeln



  • Hi, wie kann ich eine einzige Auflistung (ein eintrag/Item) aus einer ManagementObjectCollection abrufen?



  • ManagementObjectCollection leitet doch von ICollection ab, dh der indexer [] müsste da sein und auch ein Enumerator für foreach müsste vorhanden sein.
    Und Linq müsste auch ein ToArray() bereit stellen können.



  • CSL schrieb:

    ManagementObjectCollection leitet doch von ICollection ab, dh der indexer [] müsste da sein und auch ein Enumerator für foreach müsste vorhanden sein.
    Und Linq müsste auch ein ToArray() bereit stellen können.

    Ich habs mit [] brobiert ging nicht. Das ist ManagementObject kein Array. Aber offenbar mit ManagementObjectEnumerator und getEnumerator soll es irgendwie gehen.



  • @csl ICollection besitzt kein Indexer, das wird erst ab IList eingeführt
    @op nützt der Link was?
    http://msdn.microsoft.com/de-de/library/system.management.managementobjectcollection.managementobjectenumerator.aspx

    andernfalls kannst du es mit Linq/Where versuchen.



  • witte schrieb:

    @csl ICollection besitzt kein Indexer, das wird erst ab IList eingeführt
    @op nützt der Link was?
    http://msdn.microsoft.com/de-de/library/system.management.managementobjectcollection.managementobjectenumerator.aspx

    andernfalls kannst du es mit Linq/Where versuchen.

    http://msdn.microsoft.com/de-de/library/system.management.managementobjectcollection.managementobjectenumerator.aspx habe ich schon die ganze Zeit vor Augen gehabt. Aber ich verstehe nicht wie ich von dem Ergebniss von getEenumerator() einen einzigen Eintrag auslesen kann oder den nächsten Eintrag abrufen kann. Mit MoveNext() kann man ja nur überprüfen ob er zum nächsten gegangen ist, aber wie geht er überhaupt zum anderem? Durch jedes mal zuweisen automatisch um eins weiter? Aber auf was kann ich dann diesen Eintrag weisen? Auf ManagementObject geht ja nicht. Aber das ist das ich haben will, auch wenn ein ManagementObject Array.



  • Es hat ja sogar ein Bsp auf der Seite... also bitte.



  • theta schrieb:

    Es hat ja sogar ein Bsp auf der Seite... also bitte.

    Der ist sehr entt von dir der Hinweis. Auch wenn ich das schon längt gesehen habe und an diesem Beispiel nur noch mehr verhare, weil der sich irgendwie so gar nicht einbringen läst mit dem was ich hier habe.



  • Dann zeige mal deine Versuche.



  • Da ist die Rede von alle Instanzen durchlaufen. Aber von was? Was ist meine ... was mehre Instanzen hat? Ein ManagementObjectSearcher oder ein ManagementObjectSearcher.get()? Wie ich habe ich das in dem String bei ManagementClass ein zu bringen?



  • theta schrieb:

    Dann zeige mal deine Versuche.



  • theta schrieb:

    theta schrieb:

    Dann zeige mal deine Versuche.

    ich habe gar keinen Versuch, da ich überhaupt kein Plan habe wie. Was ich mit welchem Ziel bearbeiten muss habe ich ja bereits gesagt. Ich weis nur noch nciht wie. Ich muss Management.ManagementObjectSearcher(...) ausführen. Darin stecken dann aber wohl mehrere Ergebnisse, also Items und ich muss nach einander an jedes Item dran kommen. Zu nächst einmal habe ich das Ergebniss einfach einer Management.ManagementObjectCollection instanz zugewießen. Weiter komme ich aber nicht. Muss ich für das was ich als Ziel haben will auch eine ManagementClass Instanz erstellen? Und ist dann ManagementObjectCollection die zu durchlaufende Classe oder ist das überhaupt eine classe?



  • Management.ManagementObjectCollection moc = whatever();
    
    // nach einander an jedes Item dran kommen:
    foreach (object o in moc)
    {
        Management.ManagementBaseObject mbo = (Management.ManagementBaseObject) obj;
        // Traraaaa
    }
    

    EDIT: Fehler korrigiert - kein IEnumerable<T> und Items können ManagementBaseObject sein, nicht nur ManagementObject



  • hustbaer schrieb:

    Management.ManagementObjectCollection moc = whatever();
    
    // nach einander an jedes Item dran kommen:
    foreach (object o in moc)
    {
        Management.ManagementBaseObject mbo = (Management.ManagementBaseObject) obj;
        // Traraaaa
    }
    

    EDIT: Fehler korrigiert - kein IEnumerable<T> und Items können ManagementBaseObject sein, nicht nur ManagementObject

    Ich will kein For ech. Ich will wissen was dahinter steckt, sonst stehe ich immer wieder vor dem Problem. Die .Net Bibliotheken sind einfach nicht fair erklärt.



  • Verstehe nicht was du meinst - so läuft das nunmal. Klar kannst Du auch direkt auf IEnumerable operieren, aber so ein riesen unterschied ist dann das wohl nicht.

    Simon



  • theta schrieb:

    Verstehe nicht was du meinst - so läuft das nunmal. Klar kannst Du auch direkt auf IEnumerable operieren, aber so ein riesen unterschied ist dann das wohl nicht.

    Simon

    Eine beschissene For Each aus Visual Basic konnte man doch auch immer ins C++/CLI mit for(..) und while wandeln.



  • 1. Ist es keine beschissene Foreach Schleife
    2. Kannst du das genauso gut in C# machen
    3. Was ist dein Problem an der Lösung?!



  • Firefighter schrieb:

    1. Ist es keine beschissene Foreach Schleife
    2. Kannst du das genauso gut in C# machen
    3. Was ist dein Problem an der Lösung?!

    For each ist...
    Klar will ich aber nicht. Nur damit das so automatisch mit For Eeach funktioniert sind die Objekte unsinnig oft gekapselt.
    Ich möchte es viel lieber mit einer For machen, wie z.B. so

    for(int i = 0; i == objektInstanzName.length/count/...; i++)
    {
        X = objektInstanzName[i];
        ...
    }
    

    Das ist viel logischer, ersichtlicher, kontrollierbarer.



  • Dann machs doch, wo ist dein Problem? Wenn dir etwas nicht passt, mach es anderes. Aber flame hier nicht sinnlos rum.



  • @DixDa
    Du scheinst dich nicht mit den elementaren Sachen von C# auseinander setzen zu wollen, benutz die C# Features oder bleib bei einer anderen Sprache.

    foreach ist echt ein Segen, ich bin froh kaum noch diese for Krücke machen zu müssen.

    delegates, Linq, extensions etc willst du eventuell auch nicht nehmen wollen -.-

    Oh man.



  • Firefighter schrieb:

    Dann machs doch, wo ist dein Problem? Wenn dir etwas nicht passt, mach es anderes. Aber flame hier nicht sinnlos rum.

    ich flame gar nicht sinnlos rum! Es wird nirgends erklärt woher For Each die Information hat, wie es das ManagementObjectCollection in Items ähnliche, also in mehrere ManagementObject unterteilen bzw. wandeln kann. Eine sohne Collection ist ja halt kein Array, sondern irgendwie sohne Classe, wo, ein sohn Item irgendwie anders verzeichnet ist, die sich nur über eine bestimmte Methode oder Funktion, die in der Classe ist oder eben nicht oder sonst wo, einzelt hinter einander aus lesen lassen.


Anmelden zum Antworten