WMI + Netzwerk

  • Hallo zusammen,

    ich habe die letzten Tage in die Entwicklung eines Scriptes gesteckt, welche diverse Computerdaten per WMI abfragt.
    Läuft auch alles soweit ganz gut, nur stehe ich jetzt vor einem kleinen Problem :(
    Ich benötige folgende Daten der Netzwerkkarten(LAN + WLAN):

    Code
    Benötigte Daten: Quelle 
    Name: Win32_NetworkAdapterConfiguration.Description 
    MAC: Win32_NetworkAdapterConfiguration.MACAddress und auch in Win32_NetworkAdapter.MACAddress zu finden 
    DHCP(ob IP statisch oder per DHCP): Win32_NetworkAdapterConfiguration.DHCPEnabled 
    IPv4: ??? 
    Geschwindigkeit: Win32_NetworkAdapter.Speed 
    Konfiguration(ob Geschwindigkeit auto oder händisch eingestellt wurde): ???


    Anmerkung: Win32_NetworkAdapterConfiguration.IPAddress liefert mit leider nur die IPv6 obwohl ich in einem IPv4 Netzwerk bin. (IPv4 Problem GELÖST)

    Wie könnte ich die Informationen vom Win32_NetworkAdapterConfiguration mit Win32_NetworkAdapter verknüpfen? Als einziges würde mir die MAC einfallen, da diese bei beiden angegeben ist.
    Falls es richtig sein sollte, wie stelle ich das ganze an?
    Woher könnte ich die fehlenden Infos (=???) beziehen?
    Über einen Schups in die richtige Richtung wäre ich dankbar :)

    Mit dankendem Gruß,
    Lausbube

    Hier noch die Links zu den entsprechenden WMI MSDN Seiten:
    Win32_NetworkAdapterConfiguration
    Win32_NetworkAdapter
    IPv6 and IPv4 Support in WMI

    2 Mal editiert, zuletzt von Lausbube (28. Oktober 2012 um 17:00)

  • Hi,
    allererste Anlaufstelle ist das AutoIt Scriptomatic Tool. Ohne das kein WMI :thumbup:
    Ich hab mir in Scriptomatic einen Filter eingebaut, um z.B. nach "Network" zu filtern und so nur die Network-Classes angezeigt zu bekommen....

    Beispiele generiert von Scriptomatic:

    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

    [/autoit] [autoit][/autoit] [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    [/autoit] [autoit][/autoit] [autoit]

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapterConfiguration", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "ArpAlwaysSourceRoute: " & $objItem.ArpAlwaysSourceRoute & @CRLF
    $Output = $Output & "ArpUseEtherSNAP: " & $objItem.ArpUseEtherSNAP & @CRLF
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "DatabasePath: " & $objItem.DatabasePath & @CRLF
    $Output = $Output & "DeadGWDetectEnabled: " & $objItem.DeadGWDetectEnabled & @CRLF
    $strDefaultIPGateway = $objItem.DefaultIPGateway(0)
    $Output = $Output & "DefaultIPGateway: " & $strDefaultIPGateway & @CRLF
    $Output = $Output & "DefaultTOS: " & $objItem.DefaultTOS & @CRLF
    $Output = $Output & "DefaultTTL: " & $objItem.DefaultTTL & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "DHCPEnabled: " & $objItem.DHCPEnabled & @CRLF
    $Output = $Output & "DHCPLeaseExpires: " & WMIDateStringToDate($objItem.DHCPLeaseExpires) & @CRLF
    $Output = $Output & "DHCPLeaseObtained: " & WMIDateStringToDate($objItem.DHCPLeaseObtained) & @CRLF
    $Output = $Output & "DHCPServer: " & $objItem.DHCPServer & @CRLF
    $Output = $Output & "DNSDomain: " & $objItem.DNSDomain & @CRLF
    $strDNSDomainSuffixSearchOrder = $objItem.DNSDomainSuffixSearchOrder(0)
    $Output = $Output & "DNSDomainSuffixSearchOrder: " & $strDNSDomainSuffixSearchOrder & @CRLF
    $Output = $Output & "DNSEnabledForWINSResolution: " & $objItem.DNSEnabledForWINSResolution & @CRLF
    $Output = $Output & "DNSHostName: " & $objItem.DNSHostName & @CRLF
    $strDNSServerSearchOrder = $objItem.DNSServerSearchOrder(0)
    $Output = $Output & "DNSServerSearchOrder: " & $strDNSServerSearchOrder & @CRLF
    $Output = $Output & "DomainDNSRegistrationEnabled: " & $objItem.DomainDNSRegistrationEnabled & @CRLF
    $Output = $Output & "ForwardBufferMemory: " & $objItem.ForwardBufferMemory & @CRLF
    $Output = $Output & "FullDNSRegistrationEnabled: " & $objItem.FullDNSRegistrationEnabled & @CRLF
    $strGatewayCostMetric = $objItem.GatewayCostMetric(0)
    $Output = $Output & "GatewayCostMetric: " & $strGatewayCostMetric & @CRLF
    $Output = $Output & "IGMPLevel: " & $objItem.IGMPLevel & @CRLF
    $Output = $Output & "Index: " & $objItem.Index & @CRLF
    $strIPAddress = $objItem.IPAddress(0)
    $Output = $Output & "IPAddress: " & $strIPAddress & @CRLF
    $Output = $Output & "IPConnectionMetric: " & $objItem.IPConnectionMetric & @CRLF
    $Output = $Output & "IPEnabled: " & $objItem.IPEnabled & @CRLF
    $Output = $Output & "IPFilterSecurityEnabled: " & $objItem.IPFilterSecurityEnabled & @CRLF
    $Output = $Output & "IPPortSecurityEnabled: " & $objItem.IPPortSecurityEnabled & @CRLF
    $strIPSecPermitIPProtocols = $objItem.IPSecPermitIPProtocols(0)
    $Output = $Output & "IPSecPermitIPProtocols: " & $strIPSecPermitIPProtocols & @CRLF
    $strIPSecPermitTCPPorts = $objItem.IPSecPermitTCPPorts(0)
    $Output = $Output & "IPSecPermitTCPPorts: " & $strIPSecPermitTCPPorts & @CRLF
    $strIPSecPermitUDPPorts = $objItem.IPSecPermitUDPPorts(0)
    $Output = $Output & "IPSecPermitUDPPorts: " & $strIPSecPermitUDPPorts & @CRLF
    $strIPSubnet = $objItem.IPSubnet(0)
    $Output = $Output & "IPSubnet: " & $strIPSubnet & @CRLF
    $Output = $Output & "IPUseZeroBroadcast: " & $objItem.IPUseZeroBroadcast & @CRLF
    $Output = $Output & "IPXAddress: " & $objItem.IPXAddress & @CRLF
    $Output = $Output & "IPXEnabled: " & $objItem.IPXEnabled & @CRLF
    $strIPXFrameType = $objItem.IPXFrameType(0)
    $Output = $Output & "IPXFrameType: " & $strIPXFrameType & @CRLF
    $Output = $Output & "IPXMediaType: " & $objItem.IPXMediaType & @CRLF
    $strIPXNetworkNumber = $objItem.IPXNetworkNumber(0)
    $Output = $Output & "IPXNetworkNumber: " & $strIPXNetworkNumber & @CRLF
    $Output = $Output & "IPXVirtualNetNumber: " & $objItem.IPXVirtualNetNumber & @CRLF
    $Output = $Output & "KeepAliveInterval: " & $objItem.KeepAliveInterval & @CRLF
    $Output = $Output & "KeepAliveTime: " & $objItem.KeepAliveTime & @CRLF
    $Output = $Output & "MACAddress: " & $objItem.MACAddress & @CRLF
    $Output = $Output & "MTU: " & $objItem.MTU & @CRLF
    $Output = $Output & "NumForwardPackets: " & $objItem.NumForwardPackets & @CRLF
    $Output = $Output & "PMTUBHDetectEnabled: " & $objItem.PMTUBHDetectEnabled & @CRLF
    $Output = $Output & "PMTUDiscoveryEnabled: " & $objItem.PMTUDiscoveryEnabled & @CRLF
    $Output = $Output & "ServiceName: " & $objItem.ServiceName & @CRLF
    $Output = $Output & "SettingID: " & $objItem.SettingID & @CRLF
    $Output = $Output & "TcpipNetbiosOptions: " & $objItem.TcpipNetbiosOptions & @CRLF
    $Output = $Output & "TcpMaxConnectRetransmissions: " & $objItem.TcpMaxConnectRetransmissions & @CRLF
    $Output = $Output & "TcpMaxDataRetransmissions: " & $objItem.TcpMaxDataRetransmissions & @CRLF
    $Output = $Output & "TcpNumConnections: " & $objItem.TcpNumConnections & @CRLF
    $Output = $Output & "TcpUseRFC1122UrgentPointer: " & $objItem.TcpUseRFC1122UrgentPointer & @CRLF
    $Output = $Output & "TcpWindowSize: " & $objItem.TcpWindowSize & @CRLF
    $Output = $Output & "WINSEnableLMHostsLookup: " & $objItem.WINSEnableLMHostsLookup & @CRLF
    $Output = $Output & "WINSHostLookupFile: " & $objItem.WINSHostLookupFile & @CRLF
    $Output = $Output & "WINSPrimaryServer: " & $objItem.WINSPrimaryServer & @CRLF
    $Output = $Output & "WINSScopeID: " & $objItem.WINSScopeID & @CRLF
    $Output = $Output & "WINSSecondaryServer: " & $objItem.WINSSecondaryServer & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_NetworkAdapterConfiguration" )
    Endif

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func WMIDateStringToDate($dtmDate)

    [/autoit] [autoit][/autoit] [autoit]

    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    [/autoit]
    Spoiler anzeigen
    [autoit]

    ; Generated by AutoIt Scriptomatic

    [/autoit] [autoit][/autoit] [autoit]

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

    [/autoit] [autoit][/autoit] [autoit]

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_NetworkAdapter", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

    [/autoit] [autoit][/autoit] [autoit]

    If IsObj($colItems) then
    For $objItem In $colItems
    $Output = $Output & "AdapterType: " & $objItem.AdapterType & @CRLF
    $Output = $Output & "AdapterTypeId: " & $objItem.AdapterTypeId & @CRLF
    $Output = $Output & "AutoSense: " & $objItem.AutoSense & @CRLF
    $Output = $Output & "Availability: " & $objItem.Availability & @CRLF
    $Output = $Output & "Caption: " & $objItem.Caption & @CRLF
    $Output = $Output & "ConfigManagerErrorCode: " & $objItem.ConfigManagerErrorCode & @CRLF
    $Output = $Output & "ConfigManagerUserConfig: " & $objItem.ConfigManagerUserConfig & @CRLF
    $Output = $Output & "CreationClassName: " & $objItem.CreationClassName & @CRLF
    $Output = $Output & "Description: " & $objItem.Description & @CRLF
    $Output = $Output & "DeviceID: " & $objItem.DeviceID & @CRLF
    $Output = $Output & "ErrorCleared: " & $objItem.ErrorCleared & @CRLF
    $Output = $Output & "ErrorDescription: " & $objItem.ErrorDescription & @CRLF
    $Output = $Output & "Index: " & $objItem.Index & @CRLF
    $Output = $Output & "InstallDate: " & WMIDateStringToDate($objItem.InstallDate) & @CRLF
    $Output = $Output & "Installed: " & $objItem.Installed & @CRLF
    $Output = $Output & "LastErrorCode: " & $objItem.LastErrorCode & @CRLF
    $Output = $Output & "MACAddress: " & $objItem.MACAddress & @CRLF
    $Output = $Output & "Manufacturer: " & $objItem.Manufacturer & @CRLF
    $Output = $Output & "MaxNumberControlled: " & $objItem.MaxNumberControlled & @CRLF
    $Output = $Output & "MaxSpeed: " & $objItem.MaxSpeed & @CRLF
    $Output = $Output & "Name: " & $objItem.Name & @CRLF
    $Output = $Output & "NetConnectionID: " & $objItem.NetConnectionID & @CRLF
    $Output = $Output & "NetConnectionStatus: " & $objItem.NetConnectionStatus & @CRLF
    $strNetworkAddresses = $objItem.NetworkAddresses(0)
    $Output = $Output & "NetworkAddresses: " & $strNetworkAddresses & @CRLF
    $Output = $Output & "PermanentAddress: " & $objItem.PermanentAddress & @CRLF
    $Output = $Output & "PNPDeviceID: " & $objItem.PNPDeviceID & @CRLF
    $strPowerManagementCapabilities = $objItem.PowerManagementCapabilities(0)
    $Output = $Output & "PowerManagementCapabilities: " & $strPowerManagementCapabilities & @CRLF
    $Output = $Output & "PowerManagementSupported: " & $objItem.PowerManagementSupported & @CRLF
    $Output = $Output & "ProductName: " & $objItem.ProductName & @CRLF
    $Output = $Output & "ServiceName: " & $objItem.ServiceName & @CRLF
    $Output = $Output & "Speed: " & $objItem.Speed & @CRLF
    $Output = $Output & "Status: " & $objItem.Status & @CRLF
    $Output = $Output & "StatusInfo: " & $objItem.StatusInfo & @CRLF
    $Output = $Output & "SystemCreationClassName: " & $objItem.SystemCreationClassName & @CRLF
    $Output = $Output & "SystemName: " & $objItem.SystemName & @CRLF
    $Output = $Output & "TimeOfLastReset: " & WMIDateStringToDate($objItem.TimeOfLastReset) & @CRLF
    if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
    $Output=""
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_NetworkAdapter" )
    Endif

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func WMIDateStringToDate($dtmDate)

    [/autoit] [autoit][/autoit] [autoit]

    Return (StringMid($dtmDate, 5, 2) & "/" & _
    StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
    & " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
    EndFunc

    [/autoit]
  • Huhu,

    danke für die Antwort.
    Das Tool/Script kannte ich bisher noch nicht und hatte bisherige WMI Abfragen händisch erstellt. (geht also auch ohne :P )
    Das erste Script bricht jedoch gleich hier ab:

    Code
    (51) : ==> The requested action with this object has failed.:
    $strIPSecPermitIPProtocols = $objItem.IPSecPermitIPProtocols(0)
    $strIPSecPermitIPProtocols = $objItem.IPSecPermitIPProtocols(0)^ ERROR

    Tante EDIT sagt:
    Win32_NetworkAdapterConfiguration.IPAddress liefert die IPv6
    Win32_NetworkAdapterConfiguration.IPAddress(0) liefert die IPv4
    gerade in einer VBS von MS gefunden
    Damit wäre das IPv4 Problem gelöst, benötige ich nur mehr das "Zusammenspiel" der beiden WMI Abfragen.

    3 Mal editiert, zuletzt von Lausbube (24. Oktober 2012 um 22:26)

  • Wenn die MAC-Adresse das verbindende Element ist kannst du doch mit der einen Abfrage die andere filtern.
    Beispiel:

    [autoit]

    Global $o_Wmi = ObjGet("winmgmts:\\localhost\root\CIMV2")

    [/autoit][autoit][/autoit][autoit]

    For $i In $o_Wmi.ExecQuery('SELECT MACAddress, Speed FROM Win32_NetworkAdapter WHERE MACAddress <> NULL', "WQL", 48)
    For $j In $o_Wmi.ExecQuery('SELECT Description, IPAddress, DHCPEnabled FROM Win32_NetworkAdapterConfiguration WHERE MACAddress="' & $i.MACAddress & '"')
    ConsoleWrite(StringFormat("Name:\t% 30s\nMAC:\t% 30s\nDHCP:\t% 30s\nIP4:\t% 30s\nSpeed:\t% 30s\n\n\n", $j.Description, $i.MACAddress, $j.DHCPEnabled, $j.IPAddress(0), $i.Speed))
    Next
    Next

    [/autoit]
  • Danke!
    Oft ist die Lösung zu offensichtlich, dass man sie sieht. :rolleyes:

    (Code konnte ich zwar noch keinen schreiben, aber der Lösungsweg passt, somit setze ich das ganze mal auf gelöst.)

    Noch mal ein dickes Danke und noch einen schönen Abend!