我想在我的工作中从AD获取LastLogin信息。 我有大约1200个帐户。当我运行查询并包含LastLogin信息时,对于约40-45%的帐户,我得到了正确的日期返回。对于其他人,我得到一个默认值。可能是01-01-1601或01-01-1970,具体取决于我使用的转换类型。当我使用非常慢的:Net User / Domain时,我可以提取最后的登录信息,但不是10秒,我需要10分钟。显然,我想要更快的东西。
以下是我使用的代码:
var
LI: OleVariant;
int64Value: Int64;
LocalTime: TFileTime;
SystemTime: TSystemTime;
FileTime : TFileTime;
begin
try
LI := rs.Fields[FieldNumber].Value;
int64Value := LI.HighPart;
int64Value := int64Value shl 32;
int64Value := int64Value or LI.LowPart;
FileTime := TFileTime(int64Value);
Result := EncodeDate(1601,1,1);
if FileTimeToLocalFileTime(FileTime, LocalTime) then
if FileTimeToSystemTime(LocalTime, SystemTime) then
Result := SystemTimeToDateTime(SystemTime);
except
Result := 0;
end;
end;
上述工作,但只有大约40-45%的案例。 AD不返回该值或转换中存在错误。我不知道它是哪一个。由于它的某些部分有效,我倾向于说AD不会将我所需的价值归还给我。当我直接在AD中检查时,我看到了正确的值。用查询检索它们并不总是给我这些信息。 对我来说问题是,我从互联网上获取了这段代码,老实说,我理解了一点但不是一切。我迷失了我看不到的数字。此外,我无法调试所有内容。我不允许在我的工作中安装Delphi。我只能在未连接到网络的计算机上进行开发,并将我的可执行文件复制到网络中以尝试/测试所有内容。