最後に、解決策を見つけました。
lastLogon (および種類の AD 変数) にアクセスするには、まず、現在の AD ユーザー オブジェクトを受け取るオブジェクトを設定する必要があります。
Set objUser = GetObject(rs.Fields("adspath").Value)
...
次に、lastLogon もオブジェクトとして設定する必要があります。
Set objLastLogon = objUser.Get("lastLogonTimeStamp")
この OLE オブジェクトには、HighPart メンバーと LowPart メンバーがあります。そのメンバーを使用して、最終ログオン日時を計算できます。
このブログ エントリは私の目を開きました
。
これは、特定のユーザーの CN と lastLogonTimeStamp を受け取ることができる、私が実装した関数です。
Sub getADUserLastLogon(sUser As String)
Dim workspace As New NotesUIWorkspace
Dim conn As Variant
Dim sRoot As String
sRoot = "LDAP://ou=USERS_OR_WHATEVER,dc=my,dc=domain"
Set oConn = CreateObject("ADODB.Connection")
oConn.Provider = "ADSDSOObject"
oConn.Open "Ads Provider", "USERNAME", "SECRETPWD" ' open connection with specific user credentials
Dim rs
Set rs = oConn.Execute("<" & sRoot & ">;(&(objectCategory=person)(objectClass=user)(cn=" & sUser & "));" &_
"adspath,distinguishedname,sAMAccountName,cn,mail,telephoneNumber,lastLogonTimeStamp;subtree")
While Not (rs.EOF)
On Error Resume Next
Set objUser = GetObject(rs.Fields("adspath").Value)
'Print "getting user: " & objUser.Get("cn")
Set objLastLogon = objUser.Get("lastLogonTimeStamp")
Dim intLastLogonTime As Double
intLastLogonTime = (objLastLogon.HighPart * (2^32)) + objLastLogon.LowPart ' due to the 64 bit number
intLastLogonTime = intLastLogonTime / (60 * 10000000) ' convert from 100nanosec to minutes
intLastLogonTime = intLastLogonTime + 60 ' local timezone
intLastLogonTime = intLastLogonTime / 1440 ' convert to hours
intLastLogonTime = intLastLogonTime + Datenumber(1601,1,1)
Call workspace.CurrentDocument.Document.ReplaceItemValue("txtADResult", _
workspace.CurrentDocument.FieldGetText("txtADResult") & Chr(13) & _
rs.Fields("cn").Value & " Last Logon: " & Format$(Cdat(intLastLogonTime), "yyyy.mm.dd. hh:nn:ss"))
rs.MoveNext
Wend
End Sub