C# WMI Abfragen in C#

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
752
Hallo zusammen,

ich bin absoluter Neuling in WMI und wollte mich da jetzt mal an das Thema ran wagen, da es doch viele nützliche Möglichkeiten bietet, soweit ich das sehen kann.

Hierzu hätte ich ein paar Fragen, alle bezogen auf C#, also nicht PowerShell o.Ä.:

  1. Ich würde auf dem folgenden Snippet noch gerne die ,,LastTaskResult" Eigenschaft der Aufgabe sehen, also den Return-Code der angegebenen Aufgabe. Leider finde ich diese Information nirgends. Wie macht man das mit WMI? Diese Daten konnte ich bereits auslesen:
    C#:
        static void Main()
        {
            string queryDialect = "WQL";
            string computerName = "localhost";
            string namensraum = @"ROOT\Microsoft\Windows\TaskScheduler";
            string abfrage = "SELECT * FROM MSFT_ScheduledTask";
            using CimSession cimSession = CimSession.Create(computerName);
            IEnumerable<CimInstance> cimInstanceListe = cimSession.QueryInstances(namensraum, queryDialect, abfrage);
            foreach (CimInstance cimInstance in cimInstanceListe)
            {
                string aufgabenName = "Adobe Acrobat Update Task"; //Ein Beispiel-Task
                if (!cimInstance.ToString().Contains(aufgabenName))
                    continue;
                Console.WriteLine(cimInstance.CimInstanceProperties["TaskName"].Value);
                foreach (CimProperty cimProperty in cimInstance.CimInstanceProperties)
                    Console.WriteLine(cimProperty.Name + ":\t" + cimProperty.Value);
            }
            Console.ReadLine();
        }
  2. Sehe ich das richtig, dass ich nach diesem Muster immer beliebige Abfragen an die WMI-Schnittstelle stellen kann und die Ergebnisse immer als CimInstance-Instanz-Collection zurückerhalte in der alle Informationen aus der Select-Query enthalten sind?
  3. Wie wertet man so ein CimInstance-Objekt dann am besten aus? also am besten einfach mal ganz allgemein betrachtet z.B. um Prozesse und deren Namen abzufragen, Prozessorauslastung, Ramauslastung, Festplattenspeicherplatz etc.
Vielen Dank schon mal für eure Unterstützung!

LG Ghost
 
Gegenfrage: Muss es denn WMI sein?
Was ist dein eigentlicher Wunsch?

Zudem bietet es sich dann häufig auch an, nach Biblotheken zu suchen, die einem genau das abnehmen.
 
Ja, einfach aus dem Grund, weil ich mir das aus eigenem Interesse ansehen möchte und nicht, weil ich ein konkretes Problem lösen muss 🤓
 
tollertyp schrieb:
Zudem bietet es sich dann häufig auch an, nach Biblotheken zu suchen, die einem genau das abnehmen.
genau, es gibt eine gute .NET Bibliothek zum Umgang mit Geplanten Tasks, die das einfach abbildet:

1682079612692.png


C#:
var taskService = new TaskService();
var task = taskService.GetTask("OneDrive Reporting Task-S-1-5-21-1259770256-2212409095-4165910947-1001");
if (null != task)
    Console.WriteLine(task.LastTaskResult);

Da bekommt man den Wert 0 für erfolgreich ausgeführt:

1682106885407.png
 
Zuletzt bearbeitet:
Ist gut zu wissen, aber dann hab ich über WMI nur leider nichts gelernt. Produktiv macht das aber selbstverständlich absolut Sinn.
 
Wenn ich mal WMI nutzen musste, hatte ich den Code nie selbst getippt, sondern mit diesem Microsoft Tool generieren lassen

The WMI Code Creator tool allows you to generate VBScript, C#, and VB .NET code that uses WMI to complete a management task such as querying for management data, executing a method from a WMI class, or receiving event notifications using WMI.

Sonst habe ich immer über nuget die richtigen Bibliotheken gesucht, die besser zur Problemlösung passen.
 
  • Gefällt mir
Reaktionen: Ghost_Rider_R und tollertyp
Ich habe mir das 2. Tool auch mal angesehen, finde das erste aber übersichtlicher. Wenn ich das richtig sehe, dann wird der komplette Quellcode mitgeliefert, sodass man daraus auch leicht eine .NET 6 Applikation machen könnte, wenn man kein .NET 3.5 benutzen möchte. Inhaltlich waren die Ergebnisse bei einem kurzen Vergleich beim Abfragen einer Prozessliste gleich. Einzig die Suchfunktion finde ich beim 2. Tool gut, aber ich bleib dann doch lieber beim ,,offiziellen" Tool. 3. Anbieter Software mag ich irgendwie mittlerweile nicht mehr so gerne 🤷‍♂️.
 
Zurück
Oben