![]() |
Active Directory Benutzer anlegen
Hallo Community,
ich versuche momentan User in der AD anzulegen. Ich habe auch schon einige Beiträge hier im Forum gelesen, echt Klasse, aber es bringt mich irgendwie nicht weiter. Ich stehe momentan total aufm Schlauch. :wall: Ich habe die Libery ActiveDS_TLB eingebunden, aber danach komme ich irgendwie nicht weiter. Könnte mir das jemand mal so erklären das es auch ein nicht Delphi Guru versteht? Herzlichen Danke schonmal an euch. |
Re: Active Directory Benutzer anlegen
Hallo,
ich habe in den letzten Tag bisschen rum probiert und folgendes entwickelt. Hab mir einige Beiträge zu dem Thema hier im Forum angesehen.
Delphi-Quellcode:
Es wird aber kein neuer Benutzer in der AD angelegt, es kommt auch keine Fehlermeldung.
procedure adduser (ADDUVorname, ADDUNachname, ADDUBenutzername, ADDUPosition, ADDUPassword, ADDUSkript: String);
var Container : IADsContainer; NewObject : IADs; User : IADsUser; hr : HREsult; begin if (ADDUVorname = '') and (ADDUNachname = '') and (ADDUBenutzername = '') and (ADDUPosition = '') then begin showmessage ('Durchführung war erfolgreich'); Application.Terminate end else begin try CoInitialize(nil); hr := ADsGetObject('WinNT://OU="Neue Benutzer",DC="test",DC="net"',IADs,Container); if Failed(hr) then Exit; NewObject := Container.Create('User','CN='+ADDUNachname+' '+ADDUVorname) as IADsUser; NewObject.QueryInterface(IID_IADsUser, User); user.Put('Name',ADDUNachname+' '+ADDUVorname+' - '+ADDUBenutzername); user.Put('sAMAccountName',ADDUBenutzername); user.Put('userPrincipalName',ADDUBenutzername+'@test.net'); user.Put('Firstname',ADDUVorname); user.Put('LastName', ADDUNachname); user.Put('FullName', ADDUVorname+' '+ADDUNachname); user.Put('LoginScript',ADDUSkript); User.SetPassword(ADDUPassword); user.AccountDisabled:=false; end; Container._Release; NewObject._Release; User._Release; CoUninitialize; end; end; Wäre echt super wenn mir jemand helfen könnte. |
Re: Active Directory Benutzer anlegen
Hi
eine Frage hätte ich dazu. Warum 'WinNT://'? Ergänze mal Deinen Code an dieser Stelle :
Delphi-Quellcode:
dann wird auch der User angelegt.
...
user.AccountDisabled:=false; user.SetInfo; // <- Daten schreiben! ... Gruß |
Re: Active Directory Benutzer anlegen
Hi,
ich habs mit "LDAP://" versucht aber dann bekam ich eine Fehlermeldung. Danke für deine schnelle Hilfe. Ich hab das mit dem "user.setinfo;" mal getestet aber leider ohne erfolg. |
Re: Active Directory Benutzer anlegen
Hi,
ist nicht schön. Wie ich eben gesehen habe (21:08 ; 28.03.08 ), erst einmal herzlich Willkommen in der DP! Versuchen wir es mal so:
Delphi-Quellcode:
function CreateUser(ADsPath : WideString; // zB: 'LDAP://OU=NeueBenutzer,DC=test,DC=Local,DC=net' <- dies ist der Ort wo der User angelegt wird
FullName : WideString; LastName : WideString; FirstName : WideString; UserPrinzipalName : WideString; sAMAccountName : WideString; Password : WideString; var distinguishedName : WideString; // Rückgabe wird für weitere 'vereinfachte' Aktionen gebraucht AccountDisabled : Boolean) : Boolean; var destOU : IADsContainer; // Eine OU ist ein Container usr : IADsUser; // User-Object begin destOU:= GetObject(ADsPath) As IADsContainer; // Verbindung zum Container herstellen try usr:= destOU.Create('user', 'CN=' + FullName) As IADsUser; // neues 'User'-Object erstellen, so etwas wie 'Form := TForm.Create(nil)' usr.Put('sAMAccountName', sAMAccountName); // Mindestents diese Werte übergeben usr.Put('userPrincipalName', UserPrinzipalName); usr.Put('givenName', FirstName); usr.Put('sn', LastName); usr.Put('displayName', FullName); usr.SetInfo; // Werte speichern usr.SetPassword(UserDat.Password); // Erst jetzt kann das Passwort gesetzt werden usr.SetInfo; // Passwort speichern distinguishedName := usr.Get('distinguishedName'); // distinguishedName holen usr.AccountDisabled:= usr.AccountDisabled; // je nachdem Konto sperren oder aktivieren Result := true; except Result := false; on e : Exception do // Falls es zu Fehlern kommt, anzeigen ShowMessage(e.Message); end; end; Die Routine sollte nun genau das machen wofür sie gedacht ist, einen Benutzer anlegen. Einzige Voraussetzung: Übergabe gültiger Werte (der ADsPath muss exestieren). Was sind 'vereinfachte' Aktionen? zB: Änderung des Familiennamens nach Heirat.
Delphi-Quellcode:
Aufruf: ChangeLastName(distinguishedName, 'Meyer');
function ChangeLastName(ADspath : WideString; NewLastName : WideString) : Boolean;
var destOU : IADsContainer; // Eine OU ist ein Container usr : IADsUser; // User-Object begin user := GetObject(ADsPath) As IADsUser; try user.PutEx(ADS_PROPERTY_CLEAR, 'sn', Null); user.SetInfo; user.Put('sn', NewLastName); user.SetInfo; Result := true; except Result := false; on e : Exception do // Falls es zu Fehlern kommt, anzeigen ShowMessage(e.Message); end; end; Was die Freigabe der Interfaceobjecte angeht, Delphi kümmert sich darum. Die Referenzen werden verworfen, sobald sie nicht mehr benötigt werden. Um zu wissen was was ist, also 'sn' = Nachname, siehe MSDN. Gruß |
Re: Active Directory Benutzer anlegen
Danke für dein Hilfe. Ich werds gleich mal einbauen, testen kann ichs aber erst am Montag auf der Arbeit. Hab momentan kein Test System worauf ich die Sachen ausprobieren könnte.
Wenn ich weitere Attribute wie z.B. Anmeldeskripte oder Gruppenzugehörigkeit mit anlegen will kann ich auf die AD Feler zugreifen? |
Re: Active Directory Benutzer anlegen
Hi,
wie bekomm ich das den hin, wenn ich in einem Edit Feld die Domain eingebe, z.B. test.net. Dann muss ich das ja für die LDAP Verbindung in diese Form bringen "dc=test, dc=net" aber wie kann ich das innerhalb von einer Varibale trennen? Gruß |
Re: Active Directory Benutzer anlegen
Anhand des Punktes vom Domain-Namen.
|
Re: Active Directory Benutzer anlegen
Hi,
wie kann ich den eine Varibale nach einem Punkt filtern? Muss ich das was Rekursives bauen? Da ich ja zu Beginn nicht weiß was der Benutzer eingibt. Er könnte ja auch test1.test2.test3.net eingeben. Das muss ich auch irgendwie abfangen oder? |
Re: Active Directory Benutzer anlegen
Hi,
versuche es mal so:
Delphi-Quellcode:
Getippt und nicht getestet.
function DomainToDN(const s: string): string;
var i: Integer; begin with TStringList.Create do try Delimiter := '.'; DelimitedText := s; for i := 0 to Pred(Count) do Strings[i] := 'dc=' + Strings[i]; Delimiter := ','; Result := DelimitedText; finally Free; end; end; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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