![]() |
Active Directory Gruppen in Gruppen ermitteln
Hi,
irgendwie verzweifle :wall: ich gerade dabei, wenn ich alle Gruppenmitgleider (Active Directory) einer Gruppe inklusive Gruppen auslesen möchte. Momentan kann ich nur alle Gruppen eines Benutzers und alle Benutzer einer Gruppe auslesen, aber Gruppen werden leider nicht ausgelsesen. Vielleicht hat das hier schon jemand gemacht. Als Schnittstelle gehe ich über die Windows API. Dabei habe ich folgende Funktionen schon ausprobiert, jedoch lieferte mir keine die gewünschte Gruppen in Gruppen Abbildung. - NetUserGetGroups - NetGroupGetUsers - NetLocalGroupGetMembers Beispiel: Gruppe: A
Gruppe: B
Wie kann ich ermitteln, ob Gruppe B Mitglied von Gruppe A ist? Vielen Dank schon mal im Voraus für eure Hilfe!!! :thumb: |
Re: Active Directory Gruppen in Gruppen ermitteln
Moin cst_07,
solltest Du Zugriff auf das Buch "Scripting für Administratoren" von Microsoft Press haben: Dort gibt es, AFAIK, ein Script, mit dem man genau das machen kann. Evtl. wirst Du auch im Scripting Center von MS fündig |
Re: Active Directory Gruppen in Gruppen ermitteln
Hast Du versucht, es mal über LDAP zu lösen ?
|
Re: Active Directory Gruppen in Gruppen ermitteln
Vielen Dank für die Antworten.
Ich möchte LDAP nur als zusätzliche Schnittstelle optional anbieten. Die erste Schnittstelle möchte ich mit der Windows API kompltett ermitteln. Das hat soweit auch gut funktioniert, nur fehlt es noch an der "Gruppen in Gruppen" funktionalität und ich finde keine Funktion, welche die Gruppenmitglieder einer Gruppe ermittelt. H E L P :wiejetzt: |
Re: Active Directory Gruppen in Gruppen ermitteln
Frage mal
![]() |
Re: Active Directory Gruppen in Gruppen ermitteln
Also Gruppen in Gruppen habe ich auch noch nicht gehabt.
|
Re: Active Directory Gruppen in Gruppen ermitteln
Did you try NetLocalGroupGetMembers with level 2? The LOCALGROUP_MEMBERS_INFO_2 structure should provide you with groups that are member of your group. But I must say that using ADSI is the preferred way for handling this in an AD environment.
|
Re: Active Directory Gruppen in Gruppen ermitteln
Hi,
mit NetLocalGroupGetMembers komme ich leider nicht auf das gewünschte Ergebnis. Es fehlen zudem noch die Zuordnungen von globalen Gruppen in Gruppen. Irgendwie ist die Suche sehr sher mühselig in dem Bereich :roll: . Ideen sind immernoch willkommen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :cheer: |
Re: Active Directory Gruppen in Gruppen ermitteln
So ADSI is the answer here. Is there any reason why you don't want this?
|
Re: Active Directory Gruppen in Gruppen ermitteln
Thank you for your answer!
Do you know the name of the function? Or a link to some more information? At the moment I have realized all functions with the Windows API. If there will be no other way to do that, so I would like to use ADSI. ;) |
Re: Active Directory Gruppen in Gruppen ermitteln
Sure, I made you a short sample
Delphi-Quellcode:
uses JwaWindows; // Jedi Apilib with New Include model
var AdsPath: WideString; ADGroup: IADSGroup; GroupMember: IADS; GroupType: OleVariant; hr: HResult; Enum: IEnumVariant; Fetched: Cardinal; ResultItem: OleVariant; begin // an Adspath always starts with LDAP:// or optionally LDAP://SERVERNAME AdsPath := 'LDAP://CN=Domain Admins,CN=Users,DC=rmi,DC=local'; ADGroup := nil; // Bind to the object hr := ADsGetObject(PWideChar(AdsPath), IID_IADSGROUP, Pointer(ADGroup)); Memo1.Lines.Add(Format('hr=%d (%s) ', [hr, SysErrorMessage(GetLastError)])); // Check for errors! if failed(hr) then begin // raise exception... Exit end; // Enumerate the members Enum := ADGroup.Members._NewEnum as IEnumVariant; Enum.Reset; Enum.Next(1, ResultItem, Fetched); while Fetched = 1 do begin GroupMember := IDispatch(ResultItem) as IADS; // is the member a user? if GroupMember.Class_ = 'user' then begin with (GroupMember as IADSUser) do begin Memo1.Lines.Add(Format('user: %s', [Get('displayName')])); end; end // is the member a group? else if GroupMember.Class_ = 'group' then begin with (GroupMember as IADSGroup) do begin // you should really wrap retreiving AD properties in try..except Memo1.Lines.Add(Format('user: %s', [Get('displayName')])); GroupType := Get('groupType'); if GroupType = ADS_GROUP_TYPE_GLOBAL_GROUP or ADS_GROUP_TYPE_SECURITY_ENABLED then begin // Do something based on group type end; end; end; // Next Enum.Next(1, ResultItem, Fetched); end; end; |
AW: Active Directory Gruppen in Gruppen ermitteln
dies ist eigentlich dass was ich suche.
Ich bräuchte es nur ein bisschen anders. Und zwar ( wie ich schon irgendwo ausführlich im Forum geschrieben habe, eigentlich ist dies der optimale Thread, der Admin kann den anderen Beitrag löschen) geht es bei mir darum die Gruppe herauszufinden welcher meine Gruppe zugeordnet ist. Also ich bin in der gruppe "A" und diese ist der Gruppe "B" zugeordnet.Ich kann ohne Probleme herausfinden dass ich zu der Gruppe "A" gehöre, jedoch ist mein Problem dass ich nicht weiß wie ich die gruppe "B" (also eine Art "übergeordnete" Gruppe meiner Gruppe) bekommen kann. Gibt es da auch einen Weg ? LG Semir |
AW: Active Directory Gruppen in Gruppen ermitteln
keiner eine Ahnung wie ich vorgehen könnte ?
LG Semir |
AW: Active Directory Gruppen in Gruppen ermitteln
Ich hatte mal so was ähnliches, hab das so gelöst :
Damit bekomme ich alle Gruppen und deren "Untergruppen", die der Nutzer (oder das Objekt) angehört
Delphi-Quellcode:
Aufruf mit z.Bsp.: getGroups('LDAP://CN=Username,OU=Second Level,OU=First Level,DC=domain,DC=co,DC=de');
var ADGroupList : TStringList;
Delphi-Quellcode:
:wink:
procedure TWebModule1.getGroups(s:String);
var Obj,Grps : Variant; tempStr : String; i : Integer; begin try Obj := GetObject(s); except //sicherstellen das Obj nicht leer //...... end; try Grps := Obj.Get('MemberOf'); if VarType( Grps ) and varArray <> varArray then Grps := VarArrayOf( [ Grps ] ); for i := VarArrayLowBound( Grps, 1 ) to VarArrayHighBound( Grps, 1) do begin tempStr := Grps[ i ]; if ADGroupList.IndexOf( tempStr ) = -1 then begin ADGroupList.Add(tempStr); GetGroups('LDAP://' + tempStr); end; end; except //........ end; end; |
AW: Active Directory Gruppen in Gruppen ermitteln
Hallo Chris,
danke erstmal für die Antwort. Ich hätte noch eine Frage. Muss ich am Übergabeparameter noch was ändern ('LDAP://CN=Username,OU=Second Level,OU=First Level,DC=domain,DC=co,DC=de'), bzw. die Domain anpassen oder ähnliches ? Denn wenn ich es so ausführe bekomme ich folgenden fehler " Eine referenzauswertung wurde vom Server zurückgesendet" (sorry für die blöde frage, hab bis jetzt nur mit ADSI versucht das Problem zu lösen, und erst seit kurzem herausgefunden dass das was ich will nur über LDAP geht, und da bin jetzt ganz neu dabei :) ) LG Semir |
AW: Active Directory Gruppen in Gruppen ermitteln
Nein, eigentlich solltest du nur deine Parameter eintragen.
(bei mir ist das LDAP://CN=testuser,OU=Users,DC=mar,DC=op für die Dömäne mar.op und den User testuser). Ich schliesse aber nicht aus, dass du Adminrechte brauchst, um die Funktion auszuführen. Christian |
AW: Active Directory Gruppen in Gruppen ermitteln
Hi chris,
Also ich bin der User "sussa" und bin in der Domäne "acp", und den String hab ich dann folgendermaßen geändert : getGroups('LDAP://CN=sussa,OU=Users,DC=acp') Ich verfüge über Adminrechte ( kann auch die Zuordnung mit externen Programmen auslesen) Und wie müsste ich den Parameter ändern wenn ich alle Gruppen von der Domäne auslesen möchte ? Ich muss alle Gruppen von der Domäne auslese, dann die Gruppen der Gruppen, und da müsste ich dann schauen ob der Windows Benutzer in dieser 2. Gruppe ist. Wäre auch dankbar für einen Link wo ich was von dieser Problematik finden könnte, im Forum bin ich leider nicht fündig geworden LG Semir |
AW: Active Directory Gruppen in Gruppen ermitteln
Ich denke es müsste LDAP://CN=sussa,CN=Users,DC=acp heissen. Außerdem sollte die Domäne eigentlich aus mind. 2 DC bestehen (z.Bsp. test.de ist dann DC=test, DC=de) und es müsste eigentlich auch eine OU vorhanden sein.
Auf jeden Fall deutet die Fehlermeldung "Eine Referenzauswertung wurde vom Server zurückgesendet" darauf hin, dass der LDAP-String falsch ist. Sie tritt also schon beim ersten try except auf. Christian |
AW: Active Directory Gruppen in Gruppen ermitteln
Hi,
also ich hab die Daten richtig eingesetzt und bei mir funzt es auch. Wenn ich nun jedoch in der Produktivumgebung versuche geht es nicht. Der Unterschied ( oder das Problem) ist folgendes : In der Produktivumgebung bin ich in einer subdomain und versuche aber die Gruppen von der (haupt)Domain zu lesen. Durch LDAP habe ich da aber leider keinen Zugriff. Wenn ich es aber mit WINT mache kann ich schon auf die Gruppen der Domain zugreifen jedoch habe ich dann ein anderes Problem. Am Anfang hat auch alles in der Produktivumgebung mit WINT funktioniert. Dann wurde jedoch der TYp der Gruppen (zwecks Verwaltung) von "Global" auf "Universal" geändert und seit dem kann ich die Members der Gruppen nicht mehr auslesen. Da ich, wie gesagt, die ersten Versuche mit WINT gemacht habe, aber dann darauf gestoßen bin dass man nur mit LDAP verschachtelte Gruppen auslesen kann, habe ich mir gedacht dass ich die die Abfrage auf LDAP umstelle, jedoch geht es da dann überhaupt nicht, bzw. kann ich die localen Gruppen aus der subdomain lesen jedoch aber nicht nicht die Gruppen aus der (haupt)DOmain Meine Frage wäre also ob jemand eine Info hat wieso ich die Members von universellen Gruppen nicht auslesen kann(wenn einzelne Gruppen auf Global geändert werden findet das PRogramm dann auch die richtige Zugehörigkeit) oder wie ich die Mitglieder bekommen kann LG |
AW: Active Directory Gruppen in Gruppen ermitteln
Hat sich erledigt. Nachdem ich den Kunden überzeugen konnte Active Explorer auf den Rechner zu packen und an den "distinguishedname" gekommen bin, passt alles über LDAP.
Vielen Dank an chrisw LG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 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-2025 by Thomas Breitkreuz