![]() |
AD users of group
Hallo zusammen...
Wenn ich etwas hasse, dann ist es aus Active Directory zu lesen! Ich hab schon ein paar sachen damit gemacht, aber wirklich zufrieden war ich nie mit den Schnittstellen. -> Ich habe keine "einfache" Schnittstelle gefunden mit der ich alles machen kann was halt so möglich ist... (natürlich gehts, denke ich, mit jeder. aber ich kappiers nicht) Also, mein aktuellstes Problem: Ich möchte eine Liste aller Benutzer von einer bestimmten Gruppe. ACHTUNG: Ich will nicht die Distinguished Names (die krieg ich), sondern die sAMAccountName's! PS: Nur so nebenbei, bei einem Programm z.B. greiffe ich über verschiedene Schnittstellen aufs AD zu, ist das unschön? ich vermische z.B. IDSI, ADO und OLE DB ... :stupid: |
Re: AD users of group
|
Re: AD users of group
Hab leider nichts gefunden dort.
|
Re: AD users of group
Und findest du hier was:
![]() |
Re: AD users of group
Zitat:
Hab nichts gefunden was meinem Problem ähnlich wäre! Hat denn das noch niemand gemacht? |
Re: AD users of group
Zitat:
|
Re: AD users of group
Zitat:
jetzt kommt noch netapi32 ... kann das gut kommen? gehts denn nicht mit LDAP? Zitat:
Zitat:
|
Re: AD users of group
Mit LDAP habe ich nie richtig gearbeitet nur mal in der Schule kurz angeguckt. Aber ich konnte mich nicht richtig damit anfreunden. Die Win-APi ist mir da irgenwie lieber, deswegen würde ich es generell nur mit der Win-API machen. Aber das ist Ansichtssache.
|
Re: AD users of group
<edit> ganzer Eintrag editiert :lol:
Zitat:
Also, ich hab die Funktion mal getestet und sie Funktioniert.
Delphi-Quellcode:
Aber jetzt will ich ja die Gruppenmitglieder einer Bestimmten Gruppe im AD und nicht vom lokalen PC / Server. Wie mach ich das jetzt?
function CBF(Member: string; cntMembers: Integer; Data: Pointer): Boolean;
begin ShowMessage(Member+#13+IntToStr(cntMembers)); end; procedure TForm1.EButton1Click(Sender: TObject); begin EnumMembersInGroup('DC01','Administratoren', CallBackFunc, data); end; procedure TForm1.FormCreate(Sender: TObject); begin CallBackFunc := CBF; end; beziet sich auch auf: Zitat:
|
Re: AD users of group
Hallo Luckie.
Ich bin jetzt so weit. Hab deine Funktion "EnumMembersInGroup" abgeändert. Jetzt macht sie genau dass, was ich will.
Delphi-Quellcode:
@Luckie: Ich denke ich werde noch einige weitere Funktionen in der Art implementieren, soll ich dir, wenn ich "fertig" bin, die Unit zukommen lassen?
function EnumMembersInGlobalGroup(const Server: WideString; Group: WideString; Callback: TEnumMembers; Data: Pointer): DWORD; overload;
var Member : Pointer; pWork : Pointer; EntriesRead : DWORD; EntriesTotal : DWORD; NetError : NET_API_STATUS; Loop : Integer; begin Member := nil; pWork := nil; try NetError := NetGroupGetUsers(PWideChar(Server), PWideChar(Group), 0, Member, MAX_PREFERRED_LENGTH, EntriesRead, EntriesTotal, nil); if (NetError = NERR_SUCCESS) and (EntriesRead > 0) then begin pWork := Member; if Assigned(Callback) then begin for Loop := 0 to EntriesRead - 1 do begin if not Callback(PLocalGroupMembersInfo3(Member)^.lgrmi3_domainandname, EntriesRead, Data) then break; Inc(Integer(Member), sizeof(Pointer)); end; end; end; finally NetApiBufferFree(pWork); end; Result := NetError; end; Danke an alle... |
Re: AD users of group
also wie gesagt, meine Kapselung in der Unit ist nur für lokale Computer und nocht für Domain Server. Wenn du jetzt eine Kapselung auch für Domain Server machst, dann kannst du mir die Unit gerne zukommen lassen. Dann werde ich sie unter deinem namen auf meiner Homepage veröffentlichen.
|
Re: AD users of group
Zitat:
An alle die schon öfters Programme rund ums AD geschrieben haben: Welche Schnittstellen verwendet ihr und mischt ihr auch die Schnittstellen? (Mit mischen meine ich: Im selben Programm mal mit API Funktionen was aus dem AD zu lesen, dann mal mit LDAP usw..) |
Re: AD users of group
Na kommt schon, AD Programme gibts von euch doch sicher wie Sand am Meer... :wink:
|
AW: AD users of group
Die Zeit vergeht... die Fragen bleiben die Gleichen:(
Ich werde gerade mit dem Problem konfrontiert, aus einem in Delphi(Pascal) geschriebenem Programm festzustellen, ob ein ADUser einer bestimmten ADGroup angehört. Zunächst einmal vielen Dank an Luckie und cherry für die Beiträge. Im Prinzip war es genau das, was ich suchte. Habe also in meinem Programm die API Funktion NetGroupGetUser aufgenommen, bekomme aber generell den GroupNotFound Errorcode zurück. Ich benutze folgende Codezeile:
Code:
Für Servern gebe ich den Namen des entsprechenden PC an, z.B. "DC001.network1.local", für Groupn die gewünschte Gruppe, z.B. "Administratoren".
var
Servern: string; Groupn: string; ... NetError := NetGroupGetUsers(PWideChar(Servern), PWideChar(Groupn), 0, Member, MAX_PREFERRED_LENGTH, EntriesRead, EntriesTotal, nil); ... Kann mir jemand auf die Sprünge helfen? Beste Grüße H. |
AW: AD users of group
@haraldr
passt zwar nicht ganz zu Deiner Anforderung, aber vielleicht kannst Du aus meinem Ansatz der entsprechende Abfrage selbst bauen ..
Delphi-Quellcode:
Procedure GetLDAPGrouplist(const Domain, Username, Password : String; list: TStrings);
var rs, conn, com : Variant; strADS, s : string; ft : TFileTime; arrVar: Array of variant; i:Integer; begin conn := CreateOleObject('ADODB.Connection'); com := CreateOleObject('ADODB.Command'); try conn.Provider := 'ADsDSOObject'; conn.Properties ('User ID') := Username; conn.Properties ('Password') := Password; conn.Properties ('Encrypt Password') := TRUE; conn.Properties ('ADSI Flag') := 3; conn.open; com.ActiveConnection := conn; strADS := '<LDAP://' + Domain + '>;(&(objectClass=user)(sAMAccountName='+USername+'));memberOf;subtree'; Com.CommandText := strADS; Com.Properties['Page Size'] := 100000; Com.Properties['Searchscope'] := 2; Com.Properties['Cache Results'] := False; rs := Com.Execute; if Not rs.EOF then begin try arrVar := rs.Fields['memberOf'].Value except SetLength(arrVar,1); arrVar[0] := ''; end; end; Rs := NULL; finally com := NULL; conn.Close; conn := NULL; end; for i := 0 to Length(arrVar) - 1 do begin s := Copy(arrVar[i],Pos('CN=',arrVar[i]) + 3,Length(arrVar[i])); s := Copy(s,1,Pos(',',s) - 1); list.Add(s); end; end; |
AW: AD users of group
@Bummi,
vielen Dank. Dieser Ansatz hat mir sehr geholfen. Die Tests in meinem lokalen Netzwerk (AD mit Windows 2008SBS) funktionieren! Möglicherweise scheitert der API-Call NetGroupGetUsers() an Authentifizierungsproblemen... das schließe ich mal daraus, dass ich bei der LDAP/ADO Lösung Nutzer und Kennwort übermitteln muss, um die Informationen zu erhalten. Beste Grüße H. |
AW: AD users of group
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz