![]() |
Active Directory - User zu einer Gruppe hinzufügen
Hallo zusammen,
wie kann ich einen AD-User zu einer Gruppe hinzufügen? Ich dachte, ich wäre schon sehr weit, denn mit folgendem Code geht manches Schreiben in Objekte des AD:
Delphi-Quellcode:
Das funktioniert für einfache Attribute ganz gut, aber ich scheitere am Attribut "memberOf". Das ist ein Array und ich kann die Werte damit auch auslesen, aber ich bekomme es nicht hin, das wieder zurückzuschreiben.
uses
web.win.adstypes, activeds_tlb; procedure WriteUserAttrib; var lResourceStr: string; lADObj: IADsObject; lStr: string; begin lResourceStr := 'LDAP://domain.de/cn=TestUser,ou=TEST,dc=domain,dc=de'; ADsOpenObject(lResourceStr, lUsername, lPassword, 1, IADsObject, lADObj); lStr := lADObj.Get('comment'); // nur zum Testen Memo1.Lines.Add(lStr); lADObj.Put('comment', 'dummytext'); lADObj.SetInfo; end; Selbst so funktioniert es nicht, also nur auslesen und gleiches gleich wieder reinschreiben:
Delphi-Quellcode:
Fehler: "Der Server kann die Anforderung nicht ausführen."
var
lMember: Variant; begin lMember := lADObj.Get('memberOf'); lADObj.PutEx(2, 'memberOf', lMember); lADObj.SetInfo; end; Nun hab ich es von der anderen Seite her probiert, also ausgehend von der Gruppe:
Delphi-Quellcode:
Hier bekomme ich den ominösen OLE-Fehler 80005000.
var
lResourceStr: string; lADObj: IADsGroup; lStr: string; begin lResourceStr := 'LDAP://domain.de/cn=TestGruppe,ou=TEST,dc=domain,dc=de'; ADsOpenObject(lResourceStr, lUsername, lPassword, 1, IADsGroup, lADObj); lStr := lADObj.Get('cn'); // nur zum Testen Memo1.Lines.Add(lStr); lADObj.Add('cn=TestUser,ou=TEST,dc=domain,dc=de'); lADObj.SetInfo; end; Weiß jemand Rat? Ich möchte nur die Powershell vermeiden, alle anderen Wege direkt in Delphi sind willkommen. Viele Grüße Harald |
AW: Active Directory - User zu einer Gruppe hinzufügen
Führst Du das unter einem Admin-Account aus? Änderungen am AD sind meines Wissens die Sache von Domain-Administratoren, erfordern also weitreichende Rechte.
|
AW: Active Directory - User zu einer Gruppe hinzufügen
ja, der User hat Admin-Rechte - und wie gesagt, andere Änderungen einfacher Attribute funktionieren auf diese Weise.
|
AW: Active Directory - User zu einer Gruppe hinzufügen
Jetzt hab ich doch noch die "Kleinigkeit" gefunden, die gefehlt hat - und jetzt funktioniert es:
Delphi-Quellcode:
Die Domain, der LDAP-Pfad muss komplett sein!
var
lResourceStr: string; lADObj: IADsGroup; lStr: string; begin lResourceStr := 'LDAP://domain.de/cn=TestGruppe,ou=TEST,dc=domain,dc=de'; ADsOpenObject(lResourceStr, lUsername, lPassword, 1, IADsGroup, lADObj); lStr := lADObj.Get('cn'); // nur zum Testen Memo1.Lines.Add(lStr); lADObj.Add('LDAP://domain.de/cn=TestUser,ou=TEST,dc=domain,dc=de'); // das hat gefehlt: "LDAP://domain.de/..." lADObj.SetInfo; end; Vielen Dank fürs Mitdenken und viele Grüße Harald Schmid |
AW: Active Directory - User zu einer Gruppe hinzufügen
wüsste dennoch noch jemand, wie man das Array korrekt übergibt, wenn man die Methode über den User nutzen möchte. Welchen Typ hat das Array?
Delphi-Quellcode:
Viele Grüße
var
lMember: Variant; begin lMember := lADObj.Get('memberOf'); lADObj.PutEx(2, 'memberOf', lMember); lADObj.SetInfo; end; Harald Schmid |
AW: Active Directory - User zu einer Gruppe hinzufügen
Müsste der Rückgabetyp von
Delphi-Quellcode:
nicht ein
lADObj.Get('memberOf');
Delphi-Quellcode:
sein?
array of variant
Wenn ich mit dem ADExplorer von Sysinternals mein User-Account anschaue, hat der Syntax: DN, Count: 8 und jeder Eintrag besteht aus "CN=GUID/Gruppenname...,OU=Firmenname-Berlin,DC=Firmenname,DC=local". |
AW: Active Directory - User zu einer Gruppe hinzufügen
Ich kann zur Problemlösung nicht direkt etwas beitragen, aber ich habe mal durch Zufall dieses Projekt gefunden. Getestet habe ich es mangels Bedarf nicht, aber vielleicht hilft es dir ja weiter. :)
![]() |
AW: Active Directory - User zu einer Gruppe hinzufügen
Ich habe mich vor einigen Jahren einmal mit dieser Problematik beschäftigt. Ausführliche Beschreibungen und auch die Quelltexte dazu findet man auf
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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