if you are searching lastlogontimestamp, then by the timeframe you are looking for, those values should be equal on all DCs as it tracks the last time a user logged onto the domain and is replicated among DCs (note that by default this value is not stored in the GC)
heres a script i wrote to ID stale objects, im copying it in here with no warranty implied
ive used it quite a few times...just type in the DN of the domain, the type of object (defaults to user if i remember right), and how many days is considered stale, in your case, 180
i copied with word wrap on...
'=================================================================================
'=================================================================================
' -ID-STALE-OBJECTS.vbs-
' -Author: Brandon Wilson-
' -Version 5-
'The purpose of this script is to identify stale account within a given DN and its
'subtrees. You specify the DN, and you specify the number of days that consitute a
'stale account.
'=================================================================================
'=================================================================================
option explicit
on error resume next
dim ADconn, ADcmd, ADRecSet, ADusr, ADusrprop 'for the connection to AD, the command to perform, the record set results, the user object DN, and any specific properties
dim cFSO, cTxtFile, oTxtFile, cDir 'for creating the file system object, creating a text file, and writing to the text file
dim q1, q2, q3 'questions to be asked/input to collect
dim cTime, oTime, dtComp1, dtComp2 'current time, object last logon time, compare the dates
dim z, y, x 'counter variables
dim getADusr
const ForWriting = 8
const ADS_SCOPE_SUBTREE = 2
'gathering intel
q1 = inputbox("What is the Distinguished Name of the container holding the objects you wish to find? This may be a domain, OU, container, etc.", "LDAP Distinguished Name Entry Page", "OU=<ou>,OU=<ou>,DC=<domain>,DC=<extension>")
if q1 = "" then
wscript.echo "You must enter a Distinguished Name"
end if
q2 = inputbox("What type of object are you searching for? Enter as: user, computer, group, etc.", "Object Type Selection", "user")
if q2 = "" then
wscript.echo "You must enter an object type to query"
end if
q3 = inputbox("How many days is considered to be a stale object?", "Stale Object Time Specification", "60")
'creating the text files
set cFSO = createobject("scripting.filesystemobject")
set cDir = cFSO.createfolder("c:\ID-Stale-Objects")
set cDir = nothing
set cTxtFile = cFSO.createtextfile("c:\ID-Stale-Objects\Stale" & q2 & "Objects.txt")
set cTxtFile = nothing
set cTxtFile = cFSO.createtextfile("c:\ID-Stale-Objects\" & q2 & "Objects-NeverUsed.txt")
set cTxtFile = nothing
'binding to AD using LDAP to the DN specified
set ADconn = createobject("ADODB.connection")
set ADcmd = createobject("ADODB.command")
ADconn.open("PROVIDER=ADsDSOObject")
set ADcmd.activeconnection = ADconn
ADcmd.commandtext = "Select distinguishedName, Name, sAMAccountName, lastLogon, lastLogonTimestamp from 'LDAP://" & q1 & "'" & " where objectCategory=" & "'" & q2 & "'"
ADcmd.properties("Searchscope") = ADS_SCOPE_SUBTREE
ADcmd.properties("Page Size") = 50000
z = 0
y = 0
cTime = Now
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\Stale" & q2 & "Objects.txt", ForWriting)
oTxtFile.writeline("Querying for stale " & q2 & " objects in the Distinguished Name " & q1 & "." & " Date: " & cTime)
oTxtFile.writeline("Querying Distinguished Name: " & q1)
oTxtFile.writeline("Search scope: Tree and all subtrees")
oTxtFile.writeline("Object search type: " & q2)
oTxtFile.writeline("Days back to query: " & q3)
oTxtFile.writeline("Beginning process at: " & Now)
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\" & q2 & "Objects-NeverUsed.txt", ForWriting)
oTxtFile.writeline("Querying for Unused " & q2 & " objects in the Distinguished Name " & q1 & "." & " Date: " & cTime)
oTxtFile.writeline("Querying Distinguished Name: " & q1)
oTxtFile.writeline("Search scope: Tree and all subtrees")
oTxtFile.writeline("Object search type: " & q2)
oTxtFile.writeline("Days back to query: " & q3)
oTxtFile.writeline("Beginning process at: " & Now)
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
'moving through retrieved records and performing the comparison of last logon time stamp against the current time
set ADRecSet = ADcmd.execute
ADRecSet.movefirst
Do Until ADRecSet.EOF
ADusr = ADRecSet.fields("distinguishedName").value
set getADusr = getobject("LDAP://" & ADusr)
set ADusrprop = getADusr.get("lastLogonTimestamp")
oTime = ADusrprop.highpart * (2^32) + ADusrprop.lowpart
oTime = oTime / (60 * 10000000)
oTime = oTime / 1440
dtComp1 = oTime + #1/1/1601#
dtComp2 = cTime - q3
if dtComp1 = "1/1/1601" then
z = z + 1
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\" & q2 & "Objects-NeverUsed.txt", ForWriting)
oTxtFile.writeline("-----------------" & q2 & z & " ------------------")
oTxtFile.writeline("Object Friendly Name: " & ADRecSet.fields("Name").value)
oTxtFile.writeline("Object Logon Name/ID (sAMAccountName): " & ADRecSet.fields("sAMAccountName").value)
oTxtFile.writeline("Object Distinguished Name: " & ADRecSet.fields("distinguishedName").value)
oTxtFile.writeline("Last Logon Timestamp: " & dtComp1)
oTxtFile.writeline("Current Date/Time: " & cTime)
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
elseif dtComp1 = "1/3/1601" then
z = z + 1
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\" & q2 & "Objects-NeverUsed.txt", ForWriting)
oTxtFile.writeline("-----------------" & q2 & z & " ------------------")
oTxtFile.writeline("Object Friendly Name: " & ADRecSet.fields("Name").value)
oTxtFile.writeline("Object Logon Name/ID (sAMAccountName): " & ADRecSet.fields("sAMAccountName").value)
oTxtFile.writeline("Object Distinguished Name: " & ADRecSet.fields("distinguishedName").value)
oTxtFile.writeline("Last Logon Timestamp: " & dtComp1)
oTxtFile.writeline("Current Date/Time: " & cTime)
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
elseif dtComp1 = "1/2/1601" then
z = z + 1
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\" & q2 & "Objects-NeverUsed.txt", ForWriting)
oTxtFile.writeline("-----------------" & q2 & z & " ------------------")
oTxtFile.writeline("Object Friendly Name: " & ADRecSet.fields("Name").value)
oTxtFile.writeline("Object Logon Name/ID (sAMAccountName): " & ADRecSet.fields("sAMAccountName").value)
oTxtFile.writeline("Object Distinguished Name: " & ADRecSet.fields("distinguishedName").value)
oTxtFile.writeline("Last Logon Timestamp: " & dtComp1)
oTxtFile.writeline("Current Date/Time: " & cTime)
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
elseif dtComp1 = "1/4/1601" then
z = z + 1
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\" & q2 & "Objects-NeverUsed.txt", ForWriting)
oTxtFile.writeline("-----------------" & q2 & z & " ------------------")
oTxtFile.writeline("Object Friendly Name: " & ADRecSet.fields("Name").value)
oTxtFile.writeline("Object Logon Name/ID (sAMAccountName): " & ADRecSet.fields("sAMAccountName").value)
oTxtFile.writeline("Object Distinguished Name: " & ADRecSet.fields("distinguishedName").value)
oTxtFile.writeline("Last Logon Timestamp: " & dtComp1)
oTxtFile.writeline("Current Date/Time: " & cTime)
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
elseif dtComp1 = "1/5/1601" then
z = z + 1
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\" & q2 & "Objects-NeverUsed.txt", ForWriting)
oTxtFile.writeline("-----------------" & q2 & z & " ------------------")
oTxtFile.writeline("Object Friendly Name: " & ADRecSet.fields("Name").value)
oTxtFile.writeline("Object Logon Name/ID (sAMAccountName): " & ADRecSet.fields("sAMAccountName").value)
oTxtFile.writeline("Object Distinguished Name: " & ADRecSet.fields("distinguishedName").value)
oTxtFile.writeline("Last Logon Timestamp: " & dtComp1)
oTxtFile.writeline("Current Date/Time: " & cTime)
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
elseif dtComp1 < dtComp2 then
y = y + 1
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\Stale" & q2 & "Objects.txt", ForWriting)
oTxtFile.writeline("-----------------" & " Stale User " & y & " ------------------")
oTxtFile.writeline("Object Friendly Name: " & ADRecSet.fields("Name").value)
oTxtFile.writeline("Object Logon Name/ID (sAMAccountName): " & ADRecSet.fields("sAMAccountName").value)
oTxtFile.writeline("Object Distinguished Name: " & ADRecSet.fields("distinguishedName").value)
oTxtFile.writeline("Last Logon Timestamp: " & dtComp1)
oTxtFile.writeline("Current Date/Time: " & cTime)
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
end if
set ADusr = nothing
set ADusrprop = nothing
ADRecSet.movenext
loop
'closing our resources
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\Stale" & q2 & "Objects.txt", ForWriting)
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("Queried for stale " & q2 & " objects in the Distinguished Name " & q1 & "." & " Date: " & cTime)
oTxtFile.writeline("Queried Distinguished Name: " & q1)
oTxtFile.writeline("Search scope: Tree and all subtrees")
oTxtFile.writeline("Object search type: " & q2)
oTxtFile.writeline("Days back to query: " & q3)
oTxtFile.writeline("JOB COMPLETE at: " & Now)
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = cFS

pentextfile("c:\ID-Stale-Objects\" & q2 & "Objects-NeverUsed.txt", ForWriting)
oTxtFile.writeline("Querying for Unused " & q2 & " objects in the Distinguished Name " & q1 & "." & " Date: " & cTime)
oTxtFile.writeline("Querying Distinguished Name: " & q1)
oTxtFile.writeline("Search scope: Tree and all subtrees")
oTxtFile.writeline("Object search type: " & q2)
oTxtFile.writeline("Days back to query: " & q3)
oTxtFile.writeline("JOB COMPLETE at: " & Now)
oTxtFile.writeline("--------------------------------------------------------------")
oTxtFile.writeline("--------------------------------------------------------------")
set oTxtFile = nothing
set ADconn = nothing
set ADcmd = nothing
set ADRecSet = nothing
wscript.echo "The query is now complete. Please see ID-STALE-OBJECTS directory on the root of the C: drive"
wscript.quit
-Brandon Wilson
MCSE00/03, MCSA:Messaging00, MCSA03, A+
Sr. Infrastructure Management Analyst
Distributed Systems Engineering
ACS, Inc.