Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi AD + LastLogon & pwdLastSet - Hilfe!!!! (https://www.delphipraxis.net/110966-ad-lastlogon-pwdlastset-hilfe.html)

Piro 27. Mär 2008 12:49


AD + LastLogon & pwdLastSet - Hilfe!!!!
 
Hallo,

ich lese LastLogon & pwdLastSet aus Active Directory aus. Ich kann nur mit dem zurückgegeben Wert nichts anfangen bzw. diese Werte umwandeln. Ich habe die Forensuche schon bemüht und etwas gefunden aber ich werde nicht schlau daraus. Vielleicht kann mir einer etwas Gedankenunterstützung geben. Wäre sehr freundlich.

Ich bekomme folgenden Wert zurück: $011C76DC

Vielen Dank im voraus.

marabu 27. Mär 2008 14:28

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!
 
Hallo Sven,

beide AD-Attribute (lastlogon und pwdlastset) sind 64-bit Wert, die du als FILETIME weiterverarbeiten kannst.

Delphi-Quellcode:
function FileTimeToDateTime(ft: TFileTime): TDateTime;
var
  tzi: TTimeZoneInformation;
  lt, st: TSystemTime;
begin
  GetTimeZoneInformation(tzi);
  FileTimeToSystemTime(ft, st);
  SystemTimeToTzSpecificLocalTime(@tzi, st, lt);
  Result := SystemTimeToDateTime(lt);
end;
Getippt und nicht getestet.

Freundliche Grüße

Piro 28. Mär 2008 07:37

Re: AD + LastLogon & pwdLastSet
 
Irgendwie will es mir nicht gelingen.

Hier mein Code:
Delphi-Quellcode:
function FileTimeToDateTime(ft: TFileTime): TDateTime;
var
  tzi: TTimeZoneInformation;
  lt, st: TSystemTime;
begin
  GetTimeZoneInformation(tzi);
  FileTimeToSystemTime(ft, st);
  SystemTimeToTzSpecificLocalTime(@tzi, st, lt);
  Result := SystemTimeToDateTime(lt);
end;

...

procedure Tfrm_main.GetADSInfo(suchbegriff : string);
var rs,conn, com : Variant;
    strBase, strFilter, strAttributes, strADS : string;
begin
  conn := CreateOleObject('ADODB.Connection');
  com := CreateOleObject('ADODB.Command');
  try
    conn.Provider := 'ADsDSOObject';
    conn.open;
    com.ActiveConnection := conn;
    strBase := '<LDAP://test.com>';

    if rb_name.Checked = TRUE then
      strFilter := '(&(objectCategory=person)(objectClass=user)(displayname='+suchbegriff+'))';

    if rb_lanid.Checked = TRUE then
      strFilter := '(&(objectCategory=person)(objectClass=user)(sAMAccountName='+suchbegriff+'))';

    strAttributes := 'givenname,sn,sAMAccountName,lastLogon,pwdLastSet,badPasswordTime,telephoneNumber';
    strADS := strBase + ';' + strFilter + ';' + strAttributes + ';subtree';
    Com.CommandText := strADS;
    Com.Properties['Page Size'] := 100000;
    Com.Properties['Searchscope'] := 2;
    Com.Properties['Cache Results'] := False;
    rs := Com.Execute;

    if Not rs.EOF then
    begin
      lbl_vorname.Caption        := rs.Fields['givenname'].Value;
      lbl_nachname.Caption       := rs.Fields['sn'].Value;
      lbl_lanid.Caption          := UpperCase(rs.Fields['sAMAccountName'].Value);
     
      // hier knallt es: Inkompatible Typen: '_FILETIME' und 'Variant'
      lbl_passwordchange.Caption := DateTimeToStr(FileTimeToDateTime(rs.Fields['pwdLastSet'].Value));
    end
    else
      MessageDlg('Kein Datensatz gefunden.',mtInformation,[mbOK],0);
    Rs := NULL;
  finally
    com := NULL;
    conn.Close;
    conn := NULL;
  end;
end;
...
Ich habe schon versucht den Rückgabewert umzuwandeln mit VarTo... Aber leider keinen Erfolg gehabt. Für weitere Hilfestellungen wäre ich dankbar.

Gruß, Sven

marabu 28. Mär 2008 16:14

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!
 
Probiere es doch mal so:

Delphi-Quellcode:
var
  ft: TFileTime;
begin
  // ...
  Int64(ft) := rs.Fields['pwdLastSet'].Value;
  lbl_passwordchange.Caption := DateTimeToStr(FileTimeToDateTime(ft));
  // ...
end;

Larsi 28. Mär 2008 16:46

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!
 
In deinem Titel hast du das Wort Hilfe benutzt. Ist das nicht klar, dass wenn du eine Frage stellst, dass du dann Hilfe benötigst. Auch die Ausrufezeichen signalisieren, dass falls du eine hast, die Batterien deiner Funktastatur wohl alle sind, und die deshalb Ausrufezeichen setzt^^. Nimms mit nicht über aber du musst doch zugeben, dass es nicht gerade übersichtlich ist, oder? Änder dies bitte!
Wenn du jetzt bsp. dein Passwort vergessen hast oder so, oder sagen wir mal dein Delphi startet nicht mehr, dann kann man dass ja so betonen und hervorheben oder so.

Piro 28. Mär 2008 18:39

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!
 
Ich würde es ja ändern aber wie?

@marabu: danke schon mal im voraus. Ich kann es leider erst morgen testen. Ich lass euch wissen, wie das Ergebnis ist.

Schönen Abend.

Larsi 28. Mär 2008 19:15

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!
 
Wie aber wie? Einfach bei dem Beitrag auf Edit klicken und dann den Titel ändern, wo ist das Problem?

DeddyH 28. Mär 2008 19:17

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!
 
@Larsi:
Zitat:

Du kannst einen Beitrag nach seiner Erstellung nur innerhalb von 24 Stunden bearbeiten. Falls Du Anmerkungen oder Erweiterungen hinzufügen möchtest, so erstelle einen neuen Beitrag. Für absolut dringende Änderungen innerhalb dieses Beitrages wende Dich bitte an einen der Moderatoren.

Alter Mann 28. Mär 2008 20:04

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!
 
Was Soll das eigentlich LARSI?

Schlechten Tag gehabt?

DeddyH 28. Mär 2008 20:07

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!
 
Sei nachsichtig und schieb es seiner Jugend zu :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:35 Uhr.
Seite 1 von 2  1 2      

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