bestimmte Elemente eines Arrays suchen und in eine Datei schreiben

  • Hallo zusammen,

    ich habe irgendwie so etwas wie ein Brett vor Kopf .... darum mein Hilferuf an ans Forum

    Problem:
    Über eine GUI gebe ich einen Usernamen an und suche mittels AD_open + AD_GetUserGroups alle Gruppenzugehörigkeiten des Users in der aktuellen Domäne. Das schreibe ich in ein Array, welches ich z.B. anzeigen lasse oder über _ArrayToClip in die Zwischenablage sende, um das dann in ein neue Datei zu schreiben.
    Soweit sogut .....

    Für das weitere 'Processing' benötige ich aber nur ein Subset der gefundenen Gruppen - nämlich alle diejenigen, die
    (z.B.) CN=Grp_Sec_ beginnen.
    Über _ArrayFindAll bekomme ich zwar den 'Index' - also die Zeile an der ein Treffer gefunden wurde, aber nicht den eigentlichen Gruppennamen.
    Genau diesen benötige ich aber .....

    Bsp. der gefundenen Gruppen
    0 [7
    1 [CN=Grp_App_....
    2 [CN=Grp_App_....
    3 [CN=Grp_App_....
    4 [CN=Grp_App_....
    5 [CN=Grp_Sec_....
    6 [CN=Grp_Sec_....
    7 [CN=Grp_Sec_....

    _ArrayFindAll ergibt --> 5,6,7 leider nicht [CN=Grp_Sec_...., [CN=Grp_Sec_...., [CN=Grp_Sec_....

    Bin für jeden tip oder Anregung dankbar :rolleyes:


    [autoit]


    #include <AD.au3>
    #include <Array.au3>
    #include <file.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstants.au3>
    ;~ #include <MyArrayDisplay.au3>
    #include <MyArrayDisplay_new.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("User Object Properties", 266, 224, 193, 115)
    $Radio1 = GUICtrlCreateRadio("Domäne: xy.z.com", 45, 120, 169, 25)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $Label1 = GUICtrlCreateLabel("Bitte Usernamen eingeben:", 16, 16, 223, 17)
    $Label2 = GUICtrlCreateLabel("(z.B. Max.Mustermannc)", 16, 40, 223, 17)
    $Input1 = GUICtrlCreateInput("", 16, 72, 217, 21)
    GUICtrlSetState($Input1, $GUI_FOCUS)
    $OKButton = GUICtrlCreateButton("OK", 16, 180, 97, 25, $BS_DEFPUSHBUTTON)
    $CancelButton = GUICtrlCreateButton("Cancel", 140, 180, 97, 25, 0)
    $Group1 = GUICtrlCreateGroup("Domain", 16, 104, 217, 50)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    Global $aProperties[1][2], $aProperties1[1][2]
    Dim $aRecords, $text, $cdeUsernames, $cdeADSNames, $var1, $var2

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CancelButton
    Exit
    Case $OKButton
    $cdeUsernames = GUIctrlread($Input1)

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

    If $cdeUsernames = "" Or $cdeUsernames = "... hier den Usernamen eingeben ..." Then
    MsgBox(16, "Error", "Es wurde kein Username angegeben.")
    GUICtrlSetData($Input1, " ... hier den Usernamen eingeben ...")
    GUICtrlSetState($Input1, $GUI_FOCUS)
    $cdeUsernames = GUIctrlread($Input1)
    Else
    GUISetState(@SW_HIDE)
    If GUICtrlRead($Radio1) = $GUI_CHECKED Then
    $sAD_UserIdParam =
    $sAD_PasswordParam =
    $sAD_DNSDomainParam =
    $sAD_HostServerParam =
    $sAD_ConfigurationParam =
    Else
    MsgBox(0,"","Kein Radio-Button aktiv - kann eigentlich nicht sein")
    Exit
    EndIf

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

    _AD_Open($sAD_UserIdParam, $sAD_PasswordParam, $sAD_DNSDomainParam, $sAD_HostServerParam, sAD_ConfigurationParam)
    $sFQDN_User = _AD_SamAccountNameToFQDN($cdeUsernames)
    $cdeADSNames = _AD_GetObjectAttribute($sFQDN_User, "ExtensionAttribute2")
    $sSamAccount_User = _AD_FQDNToSamAccountName($cdeUsernames)
    $aProperties = _AD_GetUserGroups($sFQDN_User, $var1)
    If $aProperties <> "" Then

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

    $aiResult = _ArrayFindAll($aProperties, "CN=Grp_Sec_",0,0,0,1,0)
    _MyArrayDisplay($aiResult, $cdeUsernames & " - Eigenschaften","500|100")
    _ArrayToClip($aiResult, 1)
    $cdeFile = FileOpen("Groups.txt",1)
    $cdeText = ClipGet()
    FileWrite($cdeFile, $cdeText)
    FileClose($cdeFile)
    Run("C:\Program Files\Windows NT\Accessories\wordpad.exe Groups.txt")
    _AD_Close()
    Exit
    Else
    MsgBox(16, "Error", "Keine Informationen zum Userobjekt [ " & $cdeUsernames & " ] gefunden.")
    Exit
    EndIf

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

    EndIf
    EndSwitch
    WEnd

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

    Einmal editiert, zuletzt von ugt100 (12. April 2011 um 16:54)

  • Hier:

    [autoit]

    $aiResult = _ArrayFindAll($aProperties, "CN=Grp_Sec_",0,0,0,1,0)
    For $wert in $aiResult
    MsgBox(0,"",$aProperties[$wert])
    Next

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hallo Chip,

    super danke - das war es.
    Wie blöd eigentlich ganz einfach, wenn man es weiss ....
    Ich hatte mich da wohl zu sehr auf die Array Funktionen eingeschossen.

    Danke nochmals

    mfg
    ugt100 :rock::rock::thumbup::thumbup: