problem mit ADGetGroupMembers

  • hallo,

    bekomme immer folgende Fehlermeldung, wenn ich unen stehenden code ausführen will!

    ==> Variable used without being declared.:
    $objCommand.ActiveConnection = $objConnection
    $objCommand.ActiveConnection = ^ ERROR

    ;-------------------------------

    #include <array.au3> ; For _ArrayDisplay()

    Dim $sGroup_Name = "Administratoren"
    Dim $avList_Of_Members

    _ADGetGroupMembers($avList_Of_Members, $sGroup_Name)
    _ArrayDisplay($avList_Of_Members, "Members of group: " & $sGroup_Name)

    ; _ADGetGroupMembers
    ; Arguments,
    ; $members - Array that the result will be stored in
    ; $group - Group to retrieve members from
    ; $sort - optional, default 0 : Set to 1 to sort the array
    ; Returns an array to $members where $members[0] will be the number of users in the group and
    ; $members[1] to $members[$members[0]] are the distinguished names of the users

    Func _ADGetGroupMembers(ByRef $members, $groupdn, $sort = 0)
    ;If _ADObjectExists($group) = 0 Then Return 0

    Local $oUsr, $objCommand, $groups

    $objCommand = ObjCreate("ADODB.Command")
    $objCommand.ActiveConnection = $objConnection
    $objCommand.Properties ("Searchscope") = 2

    Dim $members[1]
    $i = 0

    While 1
    $rangemodifier = $i * 1000
    $range = "Range=" & $rangemodifier & "-" & $rangemodifier + 999
    $strCmdText = "<LDAP://" & $strHostServer & "/" & $groupdn & ">;;member;" & $range & ";base"
    $objCommand.CommandText = $strCmdText
    $objRecordSet = $objCommand.Execute
    $membersadd = $objRecordSet.fields (0).Value
    If $membersadd = 0 Then ExitLoop
    ReDim $members[UBound($members) + 1000]
    For $j = $rangemodifier + 1 To $rangemodifier + 1000
    $members[$j] = $membersadd[$j - $rangemodifier - 1]
    Next
    $i += 1
    $objRecordSet.Close
    WEnd

    $rangemodifier = $i * 1000
    $range = "Range=" & $rangemodifier & "-*"
    $strCmdText = "<LDAP://" & $strHostServer & "/" & $groupdn & ">;;member;" & $range & ";base"
    $objCommand.CommandText = $strCmdText
    $objRecordSet = $objCommand.Execute
    $membersadd = $objRecordSet.fields (0).Value

    ReDim $members[UBound($members) + UBound($membersadd) ]

    For $j = $rangemodifier + 1 To $rangemodifier + UBound($membersadd)
    $members[$j] = $membersadd[$j - $rangemodifier - 1]
    Next

    $objRecordSet.Close

    $objCommand = 0
    $objRecordSet = 0

    $members[0] = UBound($members) - 1

    If $sort = 1 Then
    _ArraySort($members, 0, 1)
    EndIf

    Return 1
    EndFunc ;==>_ADGetGroupMembers

    gruß gmmg :)

    • Offizieller Beitrag

    Hallo,

    wo wird den $objConnection deklariert und erzeugt?

  • hallo bernd,

    eigentlich sollte das in der adfunctions.au3 geschehen! hatte beim kopieren nur den falschen quelltext eingefügt, weil ich da noch probiert hatte, die function so einzubinden.

    Spoiler anzeigen

    #include <array.au3>
    #include <adfunctions.au3>


    DIM $sGroup_Name = "team-it"
    Dim $avList_Of_Members

    _ADGetGroupMembers($avList_Of_Members, $sGroup_Name)
    _ArrayDisplay($avList_Of_Members, "Members of group: " & $sGroup_Name)

    wenn ich die adfunctions.au3 include, kommt ein anderer fehler: ==> Object referenced outside a "With" statement.:
    $membersadd = $objRecordSet.fields (0).Value
    $membersadd = $objRecordSet.fields (0)^ ERROR

    habe dafür auch keine lösung und bin auch nicht ganz so vertraut.

    hintergrund des ganzen ist ja, das ich eine funktion benötige, die überprüft, ob ein user in einer ad gruppe xyz ist (funktioniert ja mit ismemberof)!
    da diese ad gruppe xyz keine direkten ad user als mitglieder hat, sondern beinhaltet weitere ad sicherheits oder verteilergruppen, in denen dann erst ad user liegen, funktioniert die "ismemberof" funktion nicht mehr, um die ad gruppe xyz abzufragen, weil die ad user ja nicht direkt mitglied dieser sind!


    für diese abfrage benötige ich eine lösung!

    gruß

    gmmg :wacko:

    3 Mal editiert, zuletzt von gmmg (27. November 2007 um 23:36)

  • hi,
    bin schon ein bisschen weiter gekommen, das ist aber alles noch nicht das wahre!
    bekomme jetzt mit "GetGroupMembers" die Mitglieder einer bestimmten AD Gruppe bzw. mit "IsMember Of" auch die AD Gruppenmitgliedschaft eines AD Users. Entweder ich speichere jetzt die Abfrageergebnisse in ein Array und vergleiche hinterher, ob user in einer gruppe ist, die in einer weiteren gruppe mitglied ist.
    warscheinlich geht das aber ganz einfach mit der _ADRecursiveGetMemberOf Function aus der adfunctions.au3!
    hier habe ich aber keine erfahrung :(

    Spoiler anzeigen


    $StrGroup = "Administratoren"
    $Members_Query = ""
    If _ADGetGroupMembers ( $Members_Query, _ADSamAccountNametoFQDN($StrGroup), 1) <> 1 Then
    MsgBox (0, "error", "Could not find group")
    EndIf

    If Not @error Then
    _ArraySort( $Members_Query)
    ;~ _ArrayDisplay( $Members_Query)
    Else
    MsgBox(16, "Error", "Error returned: @error = " & @error)
    Exit
    EndIf

    For $i = 1 To $Members_Query[0]
    If @error = 1 then ExitLoop

    ;MsgBox(0,"test",_ADDNToSamAccountName($Members_Query[$i])) ; add other item snd set a new default
    if @username = _ADDNToSamAccountName($Members_Query[$i])then
    MsgBox (0,"","vorhanden")
    EndIf
    Next

    danke für weitere hilfen

    gruß gmmg