In deinem RegExp-Pattern ist noch ein Fehler drin... ![]()
Die Beschreibung zu meinem Ethernet-Adapter Tunngle lautet:
Beschreibung. . . . . . . . . . . : TAP-Win32 Adapter V9 (Tunngle)
Wegen des [^-] wird aber nur das TAP gefunden...
Hier mal eine leicht geänderte Version:
AutoIt
;-- TIME_STAMP 2017-03-07 05:10:32
#include <array.au3>
Global $aNetAdaptersWMI = _GetMacAddressesWMI()
Global $aNetAdaptersCMD = _GetMacAddressesCMD()
_ArrayConcatenate($aNetAdaptersWMI, $aNetAdaptersCMD)
_ArrayDisplay($aNetAdaptersWMI, '', "", 0, Default, 'Func|NetworkAdapter|MacAddress')
;---------------------------- Funktionen -----------------------------------------------------------
Func _GetMacAddressesWMI()
Local $aReturn[1][3], $bY = False
If IsDeclared("oWMI") <> 1 Then
Local $oWMI = ObjGet("winmgmts:\\localhost\root\CIMV2")
If @error Or Not IsObj($oWMI) Then Return SetError(1, @error, 0)
EndIf
Local $aItems = $oWMI.ExecQuery("SELECT MACAddress, Name FROM Win32_NetworkAdapter " & _
"WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> " & _
"'Microsoft'))", "WQL", 0x10 + 0x20)
If IsObj($aItems) Then
For $x In $aItems
If $bY Then
ReDim $aReturn[UBound($aReturn) + 1][3]
Else
$bY = True
EndIf
$aReturn[UBound($aReturn) - 1][0] = 'WMI'
$aReturn[UBound($aReturn) - 1][1] = $x.Name
$aReturn[UBound($aReturn) - 1][2] = StringReplace($x.MACAddress, ':', '-')
Next
Return $aReturn
Else
Return SetError(2, 0, 0)
EndIf
EndFunc
Func _GetMacAddressesCMD()
$sCMD = _GetDOSReturn("ipconfig", "/all")
$aRegExRet = StringRegExp($sCMD, "(?s)[^-](?:Beschreibung|Description)[\.\s]+?:\s([^\r^\n]+).+?[^0-9A-F-]([0-9A-F]{2}(?:-[0-9A-F]{2}){5})[^-]", 3)
If @error Then
Return SetError(1,@error, '')
Else
Local $aReturn[UBound($aRegExRet)/2][3], $i = 0, $j = 0
While $i < UBound($aRegExRet)
$aReturn[$j][0] = 'CMD'
$aReturn[$j][1] = $aRegExRet[$i]
$aReturn[$j][2] = $aRegExRet[$i+1]
$i += 2
$j += 1
WEnd
Return $aReturn
EndIf
EndFunc
Func _GetDOSReturn($sCMD, $sParameter = '')
Local $sPara = '', $sReturn = '', $sLine
If $sParameter <> '' Then $sPara = ' ' & $sParameter
Local $iPID = Run($sCMD & $sPara, '', @SW_HIDE, 2)
While 1
$sLine = StdoutRead($iPID)
If @error Then ExitLoop
$sReturn &= $sLine
WEnd
Return $sReturn
EndFunc
;------------------------------------------------------------------------------------------------
Alles anzeigen