Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Attribute im AD löschen (https://www.delphipraxis.net/110758-attribute-im-ad-loeschen.html)

Kleffi 24. Mär 2008 12:44

Datenbank: Active Directory • Zugriff über: ADSI

Attribute im AD löschen
 
Hallo!

Ich schreibe gerade eine Anwendung zur Benutzerverwaltung. Dazu greife ich auch auf das AD zu und arbeite mit ein paar Userdaten.
Das Thema Active Directory ist neu für mich, doch ich habe hier und unter agnisoft einige hilfreiche Beiträge gefunden.
Soweit klappt auch alles. Ich kann AD-Werte lesen und auch schreiben.

Problem:
Ich bekomme es einfach nicht hin, Werte zu LÖSCHEN (auf NULL zu setzen)!!!

Speziell geht es um die Attribute "homeDrive", "HomeDirectory" und "LoginScript".
Aber selbst "FirstName" und andere kann ich nur ändern/setzen, aber nicht löschen!

Hier der Code zum Setzen der Werte.
(Ich doktor da immer noch rum)
Delphi-Quellcode:
procedure TfrmScript.btnUpdateUserSettingsClick(Sender: TObject);
var
  User : IDispatch;
begin
  if Failed(ADsGetObject(edtADsPath.Text, IID_IADsUser, user)) then
    Exit;
  with (User as IADsUser) do begin
    try
      FirstName := edtFirstName.Text;
    except
      PutEx(ADS_PROPERTY_CLEAR, 'FirstName', Null);
    end;
    try
      LastName := edtLastName.Text;
    except
    end;
    try
      FullName := edtFullName.Text;
      put('displayName', edtFullName.Text);
    except
    end;
    try
      if (cbHomeDrive.ItemIndex = 0) or (cbHomeDrive.ItemIndex = -1) then
        PutEx(ADS_PROPERTY_CLEAR, 'homeDrive', Null)
      else
        put('homeDrive', cbHomeDrive.Text);
    except
        PutEx(ADS_PROPERTY_CLEAR, 'homeDrive', Null);
    end;
    try
      if edtHomeDirectory.Text = '' then
        PutEx(ADS_PROPERTY_CLEAR, 'HomeDirectory', NULL)
      else
        HomeDirectory := edtHomeDirectory.Text;
    except
    end;
    try
      if cbLoginScripts.Text = '' then
        putex(ADS_PROPERTY_CLEAR, 'LoginScript', 0)
      else
        LoginScript := cbLoginScripts.Text;
    except
    end;
    try
      AccountDisabled := chbDisabled.Checked;
    except
    end;
    (* Speichern *)
    try
      SetInfo;
    except
    end;
  end;
end;
Nach allem, was ich bisher gefunden habe, müsste das mit PUTEX eigentlich funktionieren.
Fehlermeldungen bekomme ich auch nicht, aber es ändert sich auch nix.

Langsam bin ich am Verzweifeln :wall: .
Ich hoffe, ihr könnt mir helfen!!!!

dajuhsa 24. Mär 2008 12:53

Re: Attribute im AD löschen
 
ich denke mal, sowas wie
Delphi-Quellcode:
XYZ := '';
sollte funktionieren

Kleffi 24. Mär 2008 12:56

Re: Attribute im AD löschen
 
Leider überhaupt nicht.
Wenn ich einen leeren String übermittele, wird das so gesehen ignoriert und der alte Wert ist unverändert da.

DeddyH 24. Mär 2008 12:58

Re: Attribute im AD löschen
 
NULL heißt in Pascal nil, vielleicht liegt es daran.

Kleffi 24. Mär 2008 13:02

Re: Attribute im AD löschen
 
Der Typ muss OleVariant sein.
NULL nimmt er an - NIL ist Pointer und erzeugt Fehlermeldung.

Trotzdem schon mal danke für die raschen Antworten!

marabu 24. Mär 2008 13:31

Re: Attribute im AD löschen
 
Hallo,

PutEx() ist schon in Ordnung, schreibt aber die Daten nur in den property cache. Ohne nachfolgendes SetInfo() bleibt alles beim alten:

Delphi-Quellcode:
begin
  // ...
  if Succeeded(ads.QueryInterface(IID_IADsUser, user)) then
  begin
    user.PutEx(ADS_PROPERTY_CLEAR, attr, null);
    try
      user.SetInfo;
      Result := True;
    except
      on E: Exception do
        Log(S_ERROR + E.Message);
    end;
  end;
  // ...
end;
Frohe Ostern

Kleffi 24. Mär 2008 13:46

Re: Attribute im AD löschen
 
Hallo Marabu,

vielen Dank für die Antwort!
(is klar, gerade hab ich's auch selber rausgefunden*g*)

Stimmt auffallend: Man muss wirklich immer das SETINFO aufrufen und schon klappt's! :hello:

Warum das beim Ändern sich so anders verhält ist mir zwar nicht so ganz ersichtlich, aber was soll's?!

Jedenfalls allen nochmals vielen Dank für die rasche Unterstützung!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 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