【发布时间】:2013-12-19 21:15:07
【问题描述】:
我有一个有效的查询,但它正在捕获 AD 中的所有用户,我正试图将其缩小到过去 90 天。问题是即使查询运行,我也不再有任何输出。我知道我的数学是错误的,并且不会起飞 90 天。谁能提供这方面的帮助?
Dim currentDate
currentDate = DateDiff("s", CDate("1/1/1970"), Now()) * 1000#
currentDate = currentDate - 7776000000# 'Subtracts 90 days
'Does the query
objCommand.CommandText = _
"<LDAP://" & strDN & ">;" & _
"(&(objectclass=user)(objectcategory=person)(lastLogonTimestamp<=" & currentDate & "));" & _
"adspath,distinguishedname,sAMAccountName,lastLogonTimestamp,DisplayName,WhenCreated,userAccountControl;subtree"
'Output the query info
Set objRecordSet = objCommand.Execute
rngOut.CurrentRegion.Offset(2).ClearContents
While Not objRecordSet.EOF
rngOut.value = objRecordSet.Fields("DisplayName").value
Set rngOut = rngOut.Offset(0, 1)
rngOut.value = objRecordSet.Fields("sAMAccountName").value
Set rngOut = rngOut.Offset(0, 1)
rngOut.value = objRecordSet.Fields("WhenCreated").value
Set rngOut = rngOut.Offset(0, 1)
On Error Resume Next
Set objDate = objRecordSet.Fields("lastLogonTimestamp").value
If (Err.Number <> 0) Then
On Error GoTo 0
dtmDate = ""
Else
On Error GoTo 0
lngHigh = objDate.HighPart
lngLow = objDate.LowPart
If (lngLow < 0) Then
lngHigh = lngHigh + 1
End If
If (lngHigh = 0) And (lngLow = 0) Then
dtmDate = ""
Else
dtmDate = #1/1/1601# + (((lngHigh * (2 ^ 32)) _
+ lngLow) / 600000000) / 1440
End If
End If
rngOut.value = dtmDate
Set rngOut = rngOut.Offset(0, 1)
rngOut.value = objRecordSet.Fields("distinguishedName").value
Set rngOut = rngOut.Offset(0, 1)
Set Uservar = objRecordSet.Fields("userAccountControl")
If Uservar And 2 Then
rngOut.value = "Disabled"
rngOut.Font.ColorIndex = 3
Else
rngOut.value = "Enabled"
rngOut.Font.ColorIndex = 0
End If
Set rngOut = rngOut.Offset(1, -5)
objRecordSet.MoveNext
Wend
我有这个工作,但只有当我将(lastLogonTimestamp<=" & currentDate & ")); 更改为(lastLogon<=" & currentDate & ")); 并且我想要这不会显示正确的用户群时。谁能告诉我为什么?
【问题讨论】:
-
我建议您使用DateDiff 进行日期计算。
-
@PatricK Active Directory 以不同的格式存储日期,因此用于日期计算的内置工具在此用途有限。