Bestimmte Werte aus Netsh in einer Auswahlliste verwenden

  • Hallo zusammen,

    ich stehe vor einem Problem zu dem ich leider nichts brauchbares finden konnte und hoffe sehr auf eure Hilfe ^^

    Das Skript soll die W-LAN Profile des PC´s auslesen, in einer Liste aufführen und letztendlich das gewählte Profil umstellen.
    Das Auslesen habe ich per cmd gelöst da ich keine Möglichkeit gefunden habe das direkt in Autoit zu schaffen.
    Bei mir ist das Ergebnis der cmd in etwas so:

    Spoiler anzeigen


    Profile auf Schnittstelle WLAN:

    Gruppenrichtlinienprofile (schreibgeschtzt)
    ---------------------------------
    Firmenwlan

    Benutzerprofile
    ---------------
    Profil fr alle Benutzer : W-Lan1
    Profil fr alle Benutzer : W Lan 2
    Profil fr alle Benutzer : Wlan 1@


    Und jetzt zu meinem Problem:
    Es sollen nur die Profil-Namen hinter "Profil für alle Benutzer" verwendet werden. Die Anzahl der Profile variiert und die Profile beginnen auch nicht immer in der selben Zeile...
    Ich hab in Richtung ini, Array und anderes gesucht... leider ohne Erfolg :thumbdown:

    Anbei noch das Skript das ich aktuell habe um es besser zu verstehen:
    Die Variablen $Net1 - $Net3 sollen durch die W-LAN Profile ersetzt werden (Je Profil ein Eintrag in der Auswahlliste)

    Spoiler anzeigen

    #Region INCLUDE
    #include <GuiConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <Constants.au3>
    #EndRegion INCLUDE

    ;~ Variablen zum testen der GUI
    #Region Test Variablen
    $Net1="Netzwerk 1"
    $Net2="Netzwerk 2"
    $Net3="Netzwerk 3"
    #EndRegion Test Variablen

    #Region Read Wlan
    Local $iPID = Run(@ComSpec & ' /C "netsh wlan show profiles"' , "", @SW_HIDE, $STDOUT_CHILD)
    ProcessWaitClose($iPID)
    Local $sOutput = StdoutRead($iPID)
    MsgBox("","test",$sOutput) ;zum Funktionstest
    #EndRegion Read Wlan

    #Region GUI
    GUICreate("Netzwerk einstellen", 300, 200)
    GUISetCoord(10, 10)
    #EndRegion GUI

    #Region COMBO
    Config()
    Func Config()

    Local $idList = GUICtrlCreateCombo("", -1, -1, -1, 100)
    GUICtrlSetData($idList, $Net1)
    GUICtrlSetData($idList, $Net2)
    GUICtrlSetData($idList, $Net3)
    Local $idButton1 = GUICtrlCreateButton("Getaktete Verbindung", -1, -1 +100, 150)
    Local $idButton2 = GUICtrlCreateButton("Breitband-Verbindung", -1, -1 +130, 150)

    GUISetState(@SW_SHOW)
    Local $idMsg, $Wahl, $cmd
    ; Loop
    Do
    $idMsg = GUIGetMsg()

    If $idMsg = $idButton1 Then
    $Wahl = GUICtrlRead($idList)
    $cmd = "netsh wlan set profileparameter name=" & '"' & $Wahl & '"' & " cost=Fixed"
    ;~ RunWait(@ComSpec & " /c " & $CMD)
    MsgBox("","",$cmd)
    EndIf

    If $idMsg = $idButton2 Then
    $cmd = "netsh wlan set profileparameter name=" & '"' & $Wahl & '"' & " cost=Unrestricted"
    ;~ RunWait(@ComSpec & " /c " & $CMD)
    MsgBox("","",$cmd)
    EndIf
    Until $idMsg = $GUI_EVENT_CLOSE
    EndFunc ;==>Config

    #EndRegion COMBO


    PS: Ich bin noch sehr grün hinter den Autoit Ohren.. wenn ich irgendwo völligen Quatsch gemacht habe sagt es mir bitte.. Ich bin lernfähig :saint:


    Danke schon mal

    Blue

  • Mit diesem Regex kannst du die Ergebnisse filtern.

    Siehs dir in Ruhe an.
    Regex: (?:.*?) irgendwelche zeichen, bis das danach kommt. Das ?: sorgt dafür, dass die Gruppe (in Klammern stehen Gruppen) nicht als gefundener Text zählt.
    . = beliebiges Zeichen; * beliebig oft (0+); ? so wenig wie möglich.
    \s* whitespace 0x oder öfter
    (.*)so viel wie Möglich dazwischen.
    Sieh dir die Hilfe zu StringRegExp an, dort steht alles detailliert erklärt. RegEx ist auch relativ komplex/schwer, also nicht wundern, wenn es dir schwer vorkommt :)

  • Danke Kanashius :klatschen:

    Ich bin mir zwar sicher das ich es nicht zu 100% verstehe, aber zumindest weit genug um zu sagen was da passiert ^^


    Darf ich jetzt noch so dreist sein und fragen wie du/ihr das Array am besten in die Combox stellen würdet?
    Ich dachte jetzt an eine if Schleife bis keine Zeile mehr gefunden wird...