MAC Adressen im Array mit if Schlaufe

  • Hallo Zusammen

    Bin auf der suche nach einer Anwendung die nach den definierten MAC-Adressen in
    einem ini file ausschau halten würde (min. 20 Mac Adressen). Wenn diese eine
    Adresse mit dem im ini file übereinstimmen würde so fährt die Anwenung weiter,
    ansonst würde sich diese Anwednug schliessen. Zur Information das INI file wird
    im vorhinein schon mal benützt von einer anderen Array Abfrage es sollte somit
    so bestehen bleiben.

    Habe hier auf AutoIt einen Code gefunden der meiner Idee sehr nahe kommt dennoch
    aber bei mir nicht funktioniert, es erscheint immer die Meldung
    "Ihre MAc Adresse wurde nicht gefunden".

    Ich währe wirklich froh um hilfe, und möchte mich schon im vorhinein bedanken.
    MC


    Spoiler anzeigen

    #include <array.au3>
    #include <file.au3>

    $filename = "C:\ipconfig.txt"
    $source_filename = "C:\laptop.ini"

    Global $found = ""

    ; Macs auslesen
    RunWait(@ComSpec & " /c ipconfig /all > " & $filename, "", @SW_HIDE)
    Dim $array
    _FileReadToArray($filename, $array)
    $text = _ArrayToString($array, ";")
    $macs = StringRegExp($text, ":\s((?:\A\A-){5}\A\A);", 3)
    _ArrayDisplay($macs, "Macs")

    ; Macs vergleichen
    Dim $filearray
    _FileReadToArray($source_filename, $filearray)
    ;~ _ArrayDisplay($filearray, "filearray")
    For $i = 1 To UBound($filearray)-1
    $filearray_splitted = StringSplit($filearray[$i], ":")
    For $j = 0 To UBound($macs)-1
    If $filearray_splitted[3] = $macs[$j] Then
    $found = $macs[$j]
    ExitLoop
    EndIf
    Next
    Next

    ; Ausgabe
    If $found <> "" Then
    MsgBox(0, "MAC-Adresse gefunden", "Ihre MAC-Adresse wurde gefunden ("&$found&")")
    Else
    MsgBox(0, "MAC-Adresse nicht gefunden", "Ihre MAC-Adresse wurde nicht gefunden.")
    EndIf

    ; temporäre Datei löschen
    FileDelete($filename)

    und mein Laptop.ini sieht so aus

    Spoiler anzeigen


    [section]
    1=IBM_Z60
    1=IBM_Z70
    2=IBM_Z80
    usw

    [mac]
    1=00-13-E8-ED-66-AD
    2=00-1E-37-16-DD-49
    3=00-1C-26-D5-D0-3C
    usw

  • Hallo,

    Spoiler anzeigen
    [autoit]

    #include
    #include

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

    $filename = "ipconfig.txt"
    $source_filename = "laptop.ini"

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

    Global $found = ""

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

    ; Macs auslesen
    RunWait(@ComSpec & " /c ipconfig /all > " & $filename, "", @SW_HIDE)
    Dim $array
    _FileReadToArray($filename, $array)
    ;_arraydisplay($array)
    $text = _ArrayToString($array, ";")
    ;msgbox(0,"",$text)
    $macs = StringRegExp($text, "(..-..-..-..-..-..)", 3)
    ;msgbox(0,"",$macs)

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

    _ArrayDisplay($macs, "Macs")

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

    ; Macs vergleichen
    Dim $filearray
    _FileReadToArray($source_filename, $filearray)
    _ArrayDisplay($filearray, "filearray")
    For $i = 0 To UBound($filearray)-1
    For $j=0 to ubound($macs)-1

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

    if stringinstr($filearray[$i],$macs[$j]) Then
    $found = $macs[$j]
    ExitLoop
    EndIf
    Next
    Next

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

    ; Ausgabe
    If $found <> "" Then
    MsgBox(0, "MAC-Adresse gefunden", "Ihre MAC-Adresse wurde gefunden ("&$found&")")
    Else
    MsgBox(0, "MAC-Adresse nicht gefunden", "Ihre MAC-Adresse wurde nicht gefunden.")
    EndIf

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

    ; temporäre Datei löschen
    FileDelete($filename)

    [/autoit]


    so funzt es...
    ciao
    Andy

    • Offizieller Beitrag

    So ist es kürzer und ohne zusätzliche Temp-Datei:

    [autoit]


    MsgBox(0,0,_CheckMAC())

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

    Func _CheckMAC()
    Local $objWMIService, $colItems, $Output, $aMACs
    $objWMIService = ObjGet('winmgmts:\\localhost\root\CIMV2')
    $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_NetworkAdapter WHERE Netconnectionstatus = 2', 'WQL', 0x30)
    If Not IsObj($colItems) Then Return SetError(1, 0, 0)
    For $objItem In $colItems
    $Output &= $objItem.MACAddress & '|'
    Next
    $aMACs = IniReadSection('C:\laptop.ini', 'mac')
    If @error Then Return SetError(2, 0, 0)
    For $i = 1 To $aMACs[0][0]
    If StringInStr($Output, StringReplace($aMACs[$i][1], '-', ':')) Then Return True
    Next
    Return False
    EndFunc

    [/autoit]