VBfScript for Identifing Inactive A/c In AD

can you guys help me to create the VB script for identifing the Inactive A/c from Active Directory. Have testing DSquery & other tools but not 100% satisfied in terms of report. If you guys help me to create a VB script only for Identifying the inactive A/c it will be great help for me.

Thanks

Biplab
biplabmukherjeeAsked:
Who is Participating?

[Product update] Infrastructure Analysis Tool is now available with Business Accounts.Learn More

x
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Chris DentPowerShell DeveloperCommented:

I know it's not VbScript, but it does give very pretty reports in the format of your choosing:

http://www.joeware.net/freetools/tools/oldcmp/index.htm

And despite the name it does work for User accounts as well as computers.

It shows details of every attribute which can be used to determine activity. Choices of reporting format include HTML and CSV.

Chris
0
biplabmukherjeeAuthor Commented:
Ok can we create VB script? or Do you have any idea from where I can get this. I would like to go with VB script.
0
Chris DentPowerShell DeveloperCommented:

Which fields do you want to use for inactivity? What functional level is your domain?

Chris
0
Problems using Powershell and Active Directory?

Managing Active Directory does not always have to be complicated.  If you are spending more time trying instead of doing, then it's time to look at something else. For nearly 20 years, AD admins around the world have used one tool for day-to-day AD management: Hyena. Discover why

biplabmukherjeeAuthor Commented:
Domain functional level is Win2003 & inactivity interms of Users ( login & logout time )
0
Chris DentPowerShell DeveloperCommented:

Okay, then the most useful are:

lastLogon
lastLogonTimeStamp

lastLogon is accurate, but not replicated which means every DC must be queried.

lastLogonTimeStamp is replicated which makes for quick queries, but can be up to 14 days out of date.

If you're looking at inactivity in terms of months that 14 days is fairly inconsequential. Happy with lastLogonTimeStamp?

Chris
0
biplabmukherjeeAuthor Commented:
Yes with Lastlogon TimeStamp & just for FYI I am looking for inactivity in terms of months.

Thanks
Biplab
0
Chris DentPowerShell DeveloperCommented:

Cool, okay, won't be a sec!

Chris
0
Chris DentPowerShell DeveloperCommented:

This one creates a tab delimited report file called Test.txt (REPORT_FILE; in the same folder as you run the script). It only returns accounts that haven't logged in for 90 days (INACTIVE_DAYS).

Need any changes?

Chris
Option Explicit
 
' Report File Name
Const REPORT_FILE = "Test.txt"
 
' Inactive period in days
Const INACTIVE_DAYS = 90
 
' Creating the date filter
Dim dblInt8 : dblInt8 = CDbl(DateDiff("s", CDate("01/01/1601 00:00:00"), _
  Now - INACTIVE_DAYS))
 
Dim strLdapFilter : strLdapFilter = "(&(objectCategory=person)(objectClass=user)(lastLogonTimeStamp<=" & _
  CStr(dblInt8) & "0000000))"
 
Dim objConnection : Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
 
Dim objCommand : Set objCommand = Createobject("ADODB.Command")
objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
 
Dim objRootDSE : Set objRootDSE = GetObject("LDAP://RootDSE")
 
objCommand.CommandText = "<LDAP://" & objRootDSE.Get("defaultNamingContext") & ">;" & _
  strLdapFilter & ";name,distinguishedName,lastLogonTimeStamp;subtree"
 
Dim objRecordSet : Set objRecordSet = objCommand.Execute
 
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile : Set objFile = objFSO.OpenTextFile(REPORT_FILE, 2, True, 0)
 
Do Until objRecordSet.EOF
  Dim objLastLogon : Set objLastLogon = objRecordSet.Fields("lastLogonTimeStamp").Value
  Dim dtmLastLogon : dtmLastLogon = _
    CDate(((objLastLogon.HighPart * (2^32) + objLastLogon.LowPart) / 864000000000) + #01/01/1601#)
 
  objFile.WriteLine objRecordSet.Fields("name").Value & vbTab & _
    objRecordSet.Fields("distinguishedName").Value & vbTab & _
    dtmLastLogon
 
  ' For debugging:
  ' WScript.Echo objRecordSet.Fields("name").Value & vbTab & _
  '   objRecordSet.Fields("distinguishedName").Value & vbTab & _
  '   dtmLastLogon
 
  objRecordSet.MoveNext
Loop

Open in new window

0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
biplabmukherjeeAuthor Commented:
Thanks Chris, I will test & will update you by tommorow.

Many Thanks,

Biplab
0
biplabmukherjeeAuthor Commented:
sorry for the late response. Could you please provide me sample report. after running this script what output will come?

Thanks in advance

0
biplabmukherjeeAuthor Commented:
after executing this script it would create the file but it doesn't conatin any data in it. Can you please confirm me .

Thanks,

Biplab
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Active Directory

From novice to tech pro — start learning today.