WMI Abfrage - Ich kann den Typ nicht bestimmen

  • Ich schreib gerade ein CLI-Tool welches mir Daten von FC (Fibre Channel) Adapter abfragt.
    Dazu gibt es jede Menge WMI Klassen: Link zu den Beschreibungen der MPIO-Klassen

    MPIO_DISK_INFO
    MPIO_DISK_HEALTH
    MSFC_FCAdapterHBAAttributes

    habe ich schon erfolgreich umgesetzt,
    immer nach dem gleichen Schema:


    Doch nun versuche ich mich an der Klasse "MSFC_FibrePortHBAAttributes"
    https://msdn.microsoft.com/en-us/library/…0(v=vs.85).aspx
    welche als Rückgabe (soweit komme ich noch) diese Struktur zurückgibt: https://msdn.microsoft.com/en-us/library/…9(v=vs.85).aspx
    Ein Teil dieser Rückgabe ist die Eigenschaft/Wert/Struktur Attributes : https://msdn.microsoft.com/en-us/library/…0(v=vs.85).aspx

    Ich greife auf "Attributes" per

    AutoIt
    <em>$o_WMIService = ObjGet("winmgmts:\\" & $s_TargetHost & "\root\WMI")</em>
    <em>	$o_msfc_FCPorts = $o_WMIService.ExecQuery("SELECT * FROM MSFC_FibrePortHBAAttributes", "WQL", 0x10 + 0x20)</em>
    <em>	If IsObj($o_msfc_FCPorts) then</em>
    <em>		For $o_FCPort In $o_msfc_FCPorts</em>
    <em>			$o_FCAttributes = $o_FCPort.Attributes</em>
    <em>				For $o_FCSinglePort In $o_FCAttributes</em>

    Wenn ich $o_FCAttributes Teste so ist es vom Typ Object. Leider kann ich auf keinerlei Werte der Struktur Zugreifen. Da sind zwar auch ein paar Arrays drin, aber auch direkte Werte wie "PortSpeed"


    Nutze ich Powershell ist das "ganz easy":

    Ich muss also etwas wie "Select -Expandproperty Attributes" in AutoIt machen ... stehe aber gerade ziemlich auf dem Schlauch ....


    Gruß,
    BLinzler

  • So, hatte wieder Zeit zum testen und ausprobieren.

    In AutoIt bin ich noch nicht weiter ... aber ich habe mir gedacht "schau wie du die Daten auch anders bekommen kannst".

    In einer DOS-Box bekomme ich mit winrm ein recht schöne Ausgabe:


    Funktioniert aber schon mal nicht remote ... ich habe mir den Quelltext der zu Grunde liegenden winrm.vbs angesehen (gibt es auf jedem Windows Rechner/Server) .. aber besonders lesbar war das nicht.

    Nächster Versuch: wimc


    Die Ausgabe ist zwar ... Bescheiden aber es sind alle Daten da, man könnte sich die so herausziehen ... zudem funzt wmic auch Remote.

    Aber am liebsten wäre mir doch das ganze nativ in AutoIt selbst ....

  • Argghh ich hab die Lösung dann doch gefunden .... es war einfach zu ... einfach ...

    Ich musste kein weiteres "For ... In" nutzen sondern einfach an das "Attributes" die weiteren Strukturnamen anhängen:

    AutoIt
    $a_MSFC_FibrePortHBAAttributes[ $a_MSFC_FibrePortHBAAttributes[0][0] ][3] = $o_FCPort.Attributes.NumberofDiscoveredPorts 
    $a_MSFC_FibrePortHBAAttributes[ $a_MSFC_FibrePortHBAAttributes[0][0] ][5] = $o_FCPort.Attributes.PortFcId
    $a_MSFC_FibrePortHBAAttributes[ $a_MSFC_FibrePortHBAAttributes[0][0] ][6] = $o_FCPort.Attributes.PortMaxFrameSize
    $a_MSFC_FibrePortHBAAttributes[ $a_MSFC_FibrePortHBAAttributes[0][0] ][7] = $o_FCPort.Attributes.PortSpeed
    $a_MSFC_FibrePortHBAAttributes[ $a_MSFC_FibrePortHBAAttributes[0][0] ][8] = $o_FCPort.Attributes.PortState
    $a_MSFC_FibrePortHBAAttributes[ $a_MSFC_FibrePortHBAAttributes[0][0] ][9] = $o_FCPort.Attributes.PortSupportedClassofService
    $a_MSFC_FibrePortHBAAttributes[ $a_MSFC_FibrePortHBAAttributes[0][0] ][11] = $o_FCPort.Attributes.PortSupportedSpeed
    $a_MSFC_FibrePortHBAAttributes[ $a_MSFC_FibrePortHBAAttributes[0][0] ][12] = $o_FCPort.Attributes.PortType

    Da hätte ich ja auch schon eher drauf kommen können .....