저는 작동하는 쿼리를 가졌지 만 AD에있는 모든 사용자를 확보하고 있었고 지난 90 일간이를 좁히려하고 있습니다. 문제는 쿼리가 실행 되더라도 더 이상 출력이 없다는 것입니다. 나는 나의 수학이 틀렸고 90 일을 벗어나지 않는다는 것을 안다. 아무도 이것에 도움을 줄 수 있습니까?VBscript AD 사용자가 지난 30 일 동안 쿼리를 시도하지 않았습니다.
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 & "));
에 내가 올바른 사용자 기반을 표시하지 않습니다이 걸려 무엇을 변경할 때. 아무도 그 이유를 말할 수 있습니까? 내가하는 currentDate을 계산 권하고 싶습니다, 또한
objCommand.CommandText = _
"<LDAP://" & strDN & ">;" & _
"(&(objectclass=user)(objectcategory=person)(lastLogonTimestamp>=" & currentDate & "));" & _
"adspath,distinguishedname,sAMAccountName,lastLogon,DisplayName,WhenCreated,userAccountControl;subtree"
이에
objCommand.CommandText = _
"<LDAP://" & strDN & ">;" & _
"(&(objectclass=user)(objectcategory=person)(lastLogonTimestamp>=currentDate));" & _
"adspath,distinguishedname,sAMAccountName,lastLogon,DisplayName,WhenCreated,userAccountControl;subtree"
: 문자열 내부 변수를 확장하지 않는 VBScript tag wiki VBScript로 문서화, 그래서 당신이 변경해야으로
내가 사용하는 것이 좋습니다를 [참조 DateDiff ] (http://msdn.microsoft.com/en-us/library/xhtyw595 (v = vs.84) .aspx)를 참조하십시오. – PatricK
@PatricK Active Directory는 날짜를 다른 형식으로 저장하므로 날짜 계산을위한 기본 제공 도구가 여기에서 제한적으로 사용됩니다. –