Avatar billede brian0905 Nybegynder
28. januar 2008 - 11:37 Der er 9 kommentarer og
1 løsning

WMI for dummies

Hej alle,

Sidder og skal samle nogle informationer sammenomkring mit miljø (disk, ram, os osv)

Jeg har kigget på WMI og har besluttet at jeg er nødt til at have et hjælpetool (og det bygger man naturligvis selv). Jeg ved at man kan spørge på eksempel "Win32_Process" i Wmi, men hvordan får man en liste over de "ting" man kan spørge imod? dvs, en liste over alle "win32_XXX", og hvor stammer de fra? Kan man lave en liste over alle disse der hoster de win32:xx også og så lave sit værktøj "ærdigt" ???
Avatar billede arne_v Ekspert
28. januar 2008 - 15:26 #1
Jeg tror at de fleste checker i dokumentationen !

MS har vist lidt rod i deres web site saa dokumentationen er meget svaer at finde
lige nu.

Men et eksempel:

http://msdn2.microsoft.com/en-us/library/aa392727.aspx
Avatar billede brian0905 Nybegynder
29. januar 2008 - 08:40 #2
Jepsen, nemlig, det er sådan en liste jeg ikke har kunnet finde. Det kunne så være cool at kunne liste alle de klasser fra... et eller andet sted
Avatar billede arne_v Ekspert
30. januar 2008 - 04:17 #3
Hvis du bladrer lidt rundt omkring det link, så bør du kunne finde dem alle.
Avatar billede brian0905 Nybegynder
30. januar 2008 - 08:11 #4
Jepsen, jeg havde håbet på at kunne trække en liste fra en assembly eller lignende på min maskine, således jeg kunne automatisere det med et lille tool...pyt jeg nøjes :-)

Smid lige et svar Arne
Avatar billede arne_v Ekspert
31. januar 2008 - 01:13 #5
WMI er ikke .NET men native, så der er ikke nogen assembly at browse.

Og et svar.
Avatar billede brian0905 Nybegynder
02. februar 2008 - 19:12 #6
Ved godt det har været med siden win98. Så et lille tool hvor den listede alle klasser, så et eller andet sted må skidtet jo stå, spørgsmålet er så om det er en enkelt assembly, eller flere. Og hvilke(n) man skal kigge i for at få den liste...

http://www.ks-soft.net/hostmon.eng/wmi/index.htm se evt screenshot
Avatar billede brian0905 Nybegynder
02. februar 2008 - 19:57 #7
Sådan her lister man alle namespaces på maskinen (root/cmv2) er default

ManagementClass nsClass = new ManagementClass(
                new ManagementScope("root"),
                new ManagementPath("__namespace"), null);
            foreach (ManagementObject obj in nsClass.GetInstances())
            {
                Console.WriteLine(obj["Name"].ToString());
            }
Avatar billede brian0905 Nybegynder
02. februar 2008 - 19:58 #8
Sådan her lister man alle klasser i default namespacet:

ManagementClass newClass = new ManagementClass();
            EnumerationOptions options = new EnumerationOptions();
            options.EnumerateDeep = false;
            foreach (ManagementObject o in newClass.GetSubclasses(options))
            {
                Console.WriteLine(o["__Class"]);
            }
Avatar billede brian0905 Nybegynder
02. februar 2008 - 21:11 #9
Når man kommer sådan til at lege lidt med det, er det vildt hvad man kan. ALT, her er koden til at trække alle informationer om din computer ud og smide det i en html fil. Bemærk venligst alle begrænsningerne (den kører stadig i et par minutter). På min masking fylder det omkring 8 Mb for det hele, så pas på med den:

public class Test
    {
        public Test()
        {
            ManagementClass newClass = new ManagementClass();
            EnumerationOptions options = new EnumerationOptions();
            options.EnumerateDeep = true;
            int count = 0;
            Console.Write("Working");
            using (StreamWriter writer = new StreamWriter("c:\\mycomputer.html", false))
            {
                writer.WriteLine("<html><head><body>");
                foreach (ManagementObject o in newClass.GetSubclasses(options))
                {
                    if (count < 10)
                    {
                        Console.Write(".");
                        string className = (string)o["__Class"];
                        if (className.StartsWith("Win32"))
                        {
                            writer.WriteLine("<h1>" + className + "</h1>");
                            ManagementClass myClass = new ManagementClass(className);
                            ManagementObjectCollection collection = myClass.GetInstances();
                            if (collection.Count > 0)
                            {
                                foreach (ManagementObject obj in collection)
                                {
                                    writer.WriteLine("<h2>" + obj.Path + "</h2>");
                                    foreach (PropertyData data in obj.Properties)
                                    {
                                        string value = data.Value != null ? data.Value.ToString() : "null";
                                        writer.WriteLine("<h3>" + data.Name + " [" + value + "]</h3>");
                                    }
                                }
                                count++;
                            }
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                writer.Flush();
                writer.Close();
            }
            Console.WriteLine("Done");
        }
    }
Avatar billede brian0905 Nybegynder
02. februar 2008 - 21:12 #10
Ps. uden begrænsninger kører den bare, jeg stoppede min da den havde lavet en HTML fil på 80Mb. Note to self: overvej multithreading, og lazy load
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester