AD: Gruppen eines Benutzers in GUI darstellen

  • [autoit]

    Global $aUser = _AD_GetUserGroups(@UserName, 1) If @error > 0 Then MsgBox(64, "User: " & @UserName & "' has not been assigned to any group") EndIf

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

    $text = "" $ubound = Ubound($aUser) - 2
    For $i = "1" To $ubound
    $text = $aUser[$i] & @CRLF Next
    GUICtrlSetData($group, $text)

    [/autoit]


    (sry irgendwie verschiebt es mir den Code hier oben, mehrmals schon mit Enter ausgebessert, wird aber nicht besser)


    Hallo, nach langer Zeit nur lesen hab ich jetzt ein Problem auf das ich leider so im Forum noch keine Lösung gefunden habe. Bzw Lösungsansätze habe ich gefunden, die haben leider nicht funktioniert.

    Kurz worum's geht: Ich habe ein kleines Programm das mir allerhand Benutzerinformationen aus dem AD ausliest. Hierzu nutze ich die Active Directory UDF von Water.
    Ich habe eine Edit Box und würde gerne alle Gruppenmitgliedschaften eines Benutzers darin ausgeben. Die AD-Gruppen sind in dem Array $aUser[$i] gespeichert. Ich habe uBound -2 weil mein $i bei 1 beginnt ($aUser[0] ist für mich nicht von Bedeutung).

    Mit dem oben angezeigten Skript wird mir nur $aUser[9] (also in dem Fall der letzte Punkt in meinem Array) ausgegeben, alle anderen $aUser[1], $aUser[2], usw werden nicht angezeigt. Ich hab selber bisher größtenteils nur While Schleifen verwendet, aber auch mit so einer hats nicht funktioniert. Die For Schleife habe ich irgendwo im Forum als Lösungsansatz bei Array zu Gui gefunden.

    Jetzt gibt es genau zwei Möglichkeiten.

    1. Weiß jemand wie ich das Array komplett in einer Edit Box darstellen kann?

    oder

    2. Kennt sich jemand gut mit der AD UDF aus? Selbst wenn das mit dem Array klappt wird mir der komplette Pfad der Gruppe ausgegeben (z.B. CN=IT_Global,OU=Groups,OU=....), es wäre natürlich der Hammer wenn man nur den Gruppennamen ausgeben könnte. Ob es mit der UDF oder ohne gelöst wird wäre mir egal :)


    Vielen Dank schon mal für eure Antworten!

    2 Mal editiert, zuletzt von nevertheless (5. Juli 2012 um 10:56)

  • [autoit]

    Global $aUser = _AD_GetUserGroups(@UserName, 1)
    If @error > 0 Then
    MsgBox(64, "User: " & @UserName & "' has not been assigned to any group")
    EndIf

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

    $text = ""
    $ubound = Ubound($aUser) - 1
    ;Hier müsstest du trotzdem -1 angeben,
    ;da du sonst nur zum vorletzten Element gelangst.

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

    For $i = 1 To $ubound
    $text &= $aUser[$i] & @CRLF
    ; Mit &= verknüpfst du die beiden Strings
    ; So, wie du es vorher gemacht hast, hast du den alten Inhalt immer überschrieben.
    Next
    GUICtrlSetData($group, $text)

    [/autoit]


    Was die Formatierung des Codes angeht... Benutz dafür den Reiter "Quellcode" anstatt "Editor". Dann sollte das auch klappen.

  • Danke euch beiden.

    _StringBeetween(aUser[$i], "CN=", ",OU="))

    so habe ich mir die Gruppen geholt..

    Das mit StringBetween hört sich gut an, funktioniert aber komischerweise nicht ganz.

    Bei mit sieht das so aus, hoffe es ist richtig:

    [autoit]


    ;CN=TS_WinDesktop_gl,OU=blabla
    #include <String.au3>
    $test = _StringBetween($aUser[1],"CN=",",OU=")
    msgbox(0,"Test",$test)

    [/autoit]

    Kriege in der MSG Box nichts, also einfach "leer".

    $s_End
    The end of the string to find. Passing a blank string searches from $s_Start
    to end

    Reicht es hier ,OU= anzugeben oder muss ich den kompletten restlichen String angeben? (welches mir nicht möglich ist weil die folgende AD Struktur bei jeder Gruppe anders ist.

    Und weiterhin habe ich noch das Problem mit der GUI, irgendwie müsste ich das Array in der GUI angezeigt bekommen.

    Danke :)

  • Rückgabewert
    Erfolg: Ein 0-basierendes $Array[0] enthält den ersten gefundenen String.

    $test[0] hat dein wert..

    ich lasse mir die einzelnen rechte in einer listview anzeigen,weil ich von dort aus auh wieder einzelene löschen will:

    z.B bei mir:

    Spoiler anzeigen
    [autoit]


    For $i = 1 To Ubound($aaUser) - 1
    $text = (_StringBetween($aaUser[$i], "CN=", ",OU="))
    $testtext &= $text[0] ;& "|";@CRLF
    GUICtrlCreateListViewItem($text[0] & "|" ,$memberOfG)
    Next

    [/autoit]

    wenn es nur in einem textfeld haben willst kannst ja mit

    [autoit]

    GUICtrlSetData ( controlID, data [, default] )

    [/autoit]

    setzen

    2 Mal editiert, zuletzt von Torni (5. Juli 2012 um 10:40)

  • Manchmal sollte man einfach 2 Zeilen weiterlesen in der Hilfe ;)


    Danke nochmal an die Hilfe, die Gruppen werden jetzt perfekt ausgegeben, list view ist auch schicker als edit :)

    Einmal editiert, zuletzt von nevertheless (5. Juli 2012 um 10:56)

  • Du kannst auch, ohne die String-Operationen zu verwenden, die Common Name(cn)-Eigenschaft der Gruppe ausgeben.

    [autoit]

    Dim $grp = ObjGet('LDAP://cn=Agents,ou=Groups,dc=FBI,dc=Local')
    ConsoleWrite($grp.cn @crlf)

    [/autoit]