none
ein array aus einer wmi-Klasse auslesen RRS feed

  • Frage

  • Hey,

    Ich verwende die WMI-Class und habe als Property manchmal eine Eigenschaft die ein Array zurückgibt. Wie lese ich dieses aus????

    Kann jemand helfen??

    Freitag, 3. September 2010 21:03

Antworten

  • Hallo H.,

    ja, zum Beispiel "PowerManagementCapabilities" in Win32_Volume (wobei hier zum Beispiel zunächst PowerManagementSupported abgefragt werden müsste). Die sind vom Typ CIM_Array.
    Man prüft zum Beispiel den Typ der Property mit:

       

     if (Property.IsArray)  // oder ähnlich:


    und geht im Falle eines Arrays dann über den in Array gecasteten "Property.Value" Wert

       

     foreach (object Value in ((Array)Property.Value))
       // ...

    [An in-depth look at WMI and instrumentation, Part II | C# Help – C# Tutorials and Resources]
    http://www.csharphelp.com/2007/06/an-in-depth-look-at-wmi-and-instrumentation-part-ii/

    Typsichere Verfahren kann man auch oft mittels:

    [Mgmtclassgen.exe (Management Strongly Typed Class Generator)]
    http://msdn.microsoft.com/de-de/library/2wkebaxa.aspx

    erreichen. 


    ciao Frank
    Samstag, 4. September 2010 08:36
  • Hallo

    stelle Deine Fragen doch lieber im C#- oder .NET-Forum, da gehören sie hin.
    WMI ist nicht WPF, auch wenn beides mit W für Windows anfängt.
    Du erhältst schätzungsweise mehr Antworten!

    Zur Frage:

    Eine elegante Antwort hat Frank Dir genannt.
    Alternativ ist es ein einfacher Weg, den Rückgabewert in den Array-Typ zu casten:

    Bsp:

     object value = myManagementObject["CapabilitiesDescriptions"];
     if (value != null && value is string[])
     {
       string[] capabilitiesDescriptions = value as string[];
       Console.Write (
            string.Join(System.Environment.Newline, capabilitiesDescriptions ));
     }
    

     

    Gruß,
    Christoph

    Samstag, 4. September 2010 09:42

Alle Antworten

  • Hallo H.,

    ja, zum Beispiel "PowerManagementCapabilities" in Win32_Volume (wobei hier zum Beispiel zunächst PowerManagementSupported abgefragt werden müsste). Die sind vom Typ CIM_Array.
    Man prüft zum Beispiel den Typ der Property mit:

       

     if (Property.IsArray)  // oder ähnlich:


    und geht im Falle eines Arrays dann über den in Array gecasteten "Property.Value" Wert

       

     foreach (object Value in ((Array)Property.Value))
       // ...

    [An in-depth look at WMI and instrumentation, Part II | C# Help – C# Tutorials and Resources]
    http://www.csharphelp.com/2007/06/an-in-depth-look-at-wmi-and-instrumentation-part-ii/

    Typsichere Verfahren kann man auch oft mittels:

    [Mgmtclassgen.exe (Management Strongly Typed Class Generator)]
    http://msdn.microsoft.com/de-de/library/2wkebaxa.aspx

    erreichen. 


    ciao Frank
    Samstag, 4. September 2010 08:36
  • Hallo

    stelle Deine Fragen doch lieber im C#- oder .NET-Forum, da gehören sie hin.
    WMI ist nicht WPF, auch wenn beides mit W für Windows anfängt.
    Du erhältst schätzungsweise mehr Antworten!

    Zur Frage:

    Eine elegante Antwort hat Frank Dir genannt.
    Alternativ ist es ein einfacher Weg, den Rückgabewert in den Array-Typ zu casten:

    Bsp:

     object value = myManagementObject["CapabilitiesDescriptions"];
     if (value != null && value is string[])
     {
       string[] capabilitiesDescriptions = value as string[];
       Console.Write (
            string.Join(System.Environment.Newline, capabilitiesDescriptions ));
     }
    

     

    Gruß,
    Christoph

    Samstag, 4. September 2010 09:42