AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi AD + LastLogon & pwdLastSet - Hilfe!!!!
Thema durchsuchen
Ansicht
Themen-Optionen

AD + LastLogon & pwdLastSet - Hilfe!!!!

Ein Thema von Piro · begonnen am 27. Mär 2008 · letzter Beitrag vom 31. Mär 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#11

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!

  Alt 29. Mär 2008, 11:38
So, ich habe soeben den Code von Marabu getestet. Aber es kommt immer noch ne Fehlermeldung. Siehe Screenshot.

Ich hoffe wir finden noch ne Lösung. Dann ist nämlich mein Programm fertig. War schön.

Gruß, Sven

P.S.: Das nächste Mal lasse ich das Hilfe weg, damit hier nicht so heftige Diskussionen auftreten
Miniaturansicht angehängter Grafiken
failure_144.jpg  
  Mit Zitat antworten Zitat
marabu

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

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!

  Alt 29. Mär 2008, 21:31
Wie sieht denn deine fehlerauslösende Zuweisung jetzt aus?

Welche variant variable enthält denn den IDispatch pointer?
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#13

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!

  Alt 30. Mär 2008, 22:05
Mein Code sieht jetzt so aus:

Delphi-Quellcode:
procedure Tfrm_main.GetADSInfo(suchbegriff : string);
var rs,conn, com : Variant;
    strBase, strFilter, strAttributes, strADS : string;
    ft : TFileTime;
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 passt es immer noch nicht...warum?...keine Ahnung davon
      Int64(ft) := rs.Fields['pwdLastSet'].Value;
      lbl_passwordchange.Caption := DateTimeToStr(FileTimeToDateTime(ft));
    end
    else
      MessageDlg('Kein Datensatz gefunden.',mtInformation,[mbOK],0);
    Rs := NULL;
  finally
    com := NULL;
    conn.Close;
    conn := NULL;
  end;
end;
Großes Fragenzeichen. Wenn ich das so umsetze, kommt die Fehlermeldung, die ich im Screenshot gezeigt habe.
  Mit Zitat antworten Zitat
Alter Mann

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

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!

  Alt 31. Mär 2008, 13:08
Hallo,

hat zwar ebend ein wenig bei mir gedauert (ca. 40 min), aber jetzt geht es.

Folgende Vorbemerkung zu pwdLastSet:

(Auszug aus der MSDN)
Zitat:
CN Pwd-Last-Set
Ldap-Display-Name pwdLastSet
Size 8 bytes
Update Privilege This value is set by the system.
Update Frequency Each time the password is changed.
Attribute-Id 1.2.840.113556.1.4.96
System-Id-Guid bf967a0a-0de6-11d0-a285-00aa003049e2
Syntax Interval
In diesem Fall ist die Syntax intressant und es stellt sich die Frage was ist 'Interval'?
Zitat:
Name Interval
Syntax ID 2.5.5.16
OM ID 65
MAPI Type -
ADS Type ADSTYPE_LARGE_INTEGER
Variant Type VT_DISPATCH
SDS Type A COM object that can be cast to an IADsLargeInteger.
Damit sind schon alle Fragen beantwortert und die Fehlermeldung ist klar.

Delphi-Quellcode:
...
rs.Fields['pwdLastSet'].Value
...
gibt ein Interface vom Type IADsLargeInteger zurück.

Was ist zu tun?

1. ActiveDs_TLB in die uses-klausel aufnehmen (wegen IADsLargeInteger).
2. die Variablen pls : Variant und li : IADsLargeInteger; anlegen und
3. das ganze zur Zusammenarbeit bringen
Delphi-Quellcode:
...
      pls := rs.Fields['pwdLastSet'].Value;
      li := IDispatch(pls) As IADsLargeInteger;
      ft.dwLowDateTime := Li.LowPart;
      ft.dwHighDateTime := li.HighPart;
...
Fertig. Nun klappt es auch mit dem Datum und der Uhrzeit.

Viele Grüße und bis bald.
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#15

Re: AD + LastLogon & pwdLastSet - Hilfe!!!!

  Alt 31. Mär 2008, 13:56
GENIAL.

Vielen vielen Dank euch. Vorallem gilt der Dank Alter Mann und marabu.

Nun ist mein Programm fertig.

DANKE NOCHMAL.

Gruß, Sven
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:31 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