AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Active Directory Benutzer anlegen
Thema durchsuchen
Ansicht
Themen-Optionen

Active Directory Benutzer anlegen

Offene Frage von "Sasuke"
Ein Thema von Sasuke · begonnen am 20. Mär 2008 · letzter Beitrag vom 8. Apr 2008
Antwort Antwort
Seite 1 von 2  1 2      
Sasuke

Registriert seit: 20. Mär 2008
16 Beiträge
 
#1

Active Directory Benutzer anlegen

  Alt 20. Mär 2008, 12:30
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.
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.
  Mit Zitat antworten Zitat
Sasuke

Registriert seit: 20. Mär 2008
16 Beiträge
 
#2

Re: Active Directory Benutzer anlegen

  Alt 28. Mär 2008, 10:39
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:
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;
Es wird aber kein neuer Benutzer in der AD angelegt, es kommt auch keine Fehlermeldung.
Wäre echt super wenn mir jemand helfen könnte.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Active Directory Benutzer anlegen

  Alt 28. Mär 2008, 10:58
Hi

eine Frage hätte ich dazu. Warum 'WinNT://'?


Ergänze mal Deinen Code an dieser Stelle :
Delphi-Quellcode:
...
user.AccountDisabled:=false;

user.SetInfo; // <- Daten schreiben!
...
dann wird auch der User angelegt.

Gruß
  Mit Zitat antworten Zitat
Sasuke

Registriert seit: 20. Mär 2008
16 Beiträge
 
#4

Re: Active Directory Benutzer anlegen

  Alt 28. Mär 2008, 11:13
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.
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
947 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Active Directory Benutzer anlegen

  Alt 28. Mär 2008, 13:51
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:
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;
Aufruf: ChangeLastName(distinguishedName, 'Meyer');

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ß
  Mit Zitat antworten Zitat
Sasuke

Registriert seit: 20. Mär 2008
16 Beiträge
 
#6

Re: Active Directory Benutzer anlegen

  Alt 29. Mär 2008, 10:15
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?
  Mit Zitat antworten Zitat
Sasuke

Registriert seit: 20. Mär 2008
16 Beiträge
 
#7

Re: Active Directory Benutzer anlegen

  Alt 30. Mär 2008, 10:23
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ß
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

Re: Active Directory Benutzer anlegen

  Alt 30. Mär 2008, 12:16
Anhand des Punktes vom Domain-Namen.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Sasuke

Registriert seit: 20. Mär 2008
16 Beiträge
 
#9

Re: Active Directory Benutzer anlegen

  Alt 31. Mär 2008, 11:34
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Active Directory Benutzer anlegen

  Alt 31. Mär 2008, 11:40
Hi,

versuche es mal so:

Delphi-Quellcode:
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;
Getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz