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ß