' ' Lists users of a domain with the domain controller last used to log in, and the date/time of the ' last login. Outputs results to console in comma seperated format. Useful to pipe output to a file ' for loading in a spreadsheet. (cscript adtool-users.vbs > userlist.csv) ' ' Change these for your domain domain = "dc=web,dc=mycompany,dc=net" domain2 = "web.mycompany.net" Dim oUsers,oDCList,ObjConnection,objCommand,domain,domain2 Set ObjConnection = CreateObject("ADODB.Connection") ObjConnection.Open "Provider=ADsDSOObject;" Set objCommand = CreateObject("ADODB.Command") objCommand.ActiveConnection = ObjConnection category = "user" ' should also work for computer accounts, but doesn't getDCs() ' sets up oDCList getAccounts() ' sets up oUsers While Not oUsers.EOF getLastDate(oUsers.Fields("sAMAccountName")) oUsers.MoveNext Wend WScript.Quit() Function getDCs() Set oDCList=GetObject("LDAP://OU=Domain Controllers," & domain) 'DN for Domain Controllers ' WScript.Echo("Domain controllers are:") ' For Each DCName In oDCList ' WScript.Echo(" " & DCName.name) ' Next End Function Function getAccounts() objCommand.CommandText = ";(objectCategory=" & category & ");sAMAccountName;subtree" Set oUsers = objCommand.Execute End Function Function getLastDate(name) On Error Resume Next ' blank LastLogin causes error newestDate = 0 result = name & ",-,never" For Each DCName In oDCList dc = Right(DCName.name,(Len(DCName.name)-3)) ' Remove the "CN=" from dc names Set oComp = GetObject("WinNT://" & dc & "." & domain2 & "/" & name & "," & category) If Err.Number <> 0 Then Err.Clear() End If If oComp.LastLogin > newestDate Then newestDate = oComp.LastLogin result = name & "," & dc & "," & oComp.LastLogin End if Next WScript.Echo(result) On Error goto 0 End function