Query Active Directory for specific user information

I need to query AD for specific information on about 300 users. I need to find out the following for each - Exchange Sever, Message Store and Exchange Database Name. I have a list of users by FirstName LastName. I realize I may have to get the username to make this easier. I've used Saved Queries before to find Disabled Users but never to find specific info on a specific list of users. This AD structure is very large with over 20 seperate Exchange Servers and 30,000+ users.

Who is Participating?
Chris DentConnect With a Mentor PowerShell DeveloperCommented:

If you only have one domain you can use the sAMAccountName (pre-Windows 2000 Logon name) as a unique ID.

If you have multiple domains you need something that will be unique across the forest, either userPrincipalName (logon name) or an SMTP address.

This example shows filters build around both, those will allow us to use FindOne().

If you prefer a different language for this please let me know, I can help with VbScript, PowerShell, C# . NET and VB .NET.

' Using sAMAccountName
Dim searchFilter As String = "(&(sAMAccountName=dentc))"
' Using userPrincipalName
Dim searchFilter = "(&(userPrincipalName=dentc@local.highorbit.co.uk))"
Dim domainRoot As New DirectoryEntry()
Dim ldapSearch As New DirectorySearcher(domainRoot, searchFilter)
Dim ldapSearchResult As SearchResult = ldapSearch.FindOne()
Label1.Text = ldapSearchResult.Properties("homemdb")(0).ToString()

Open in new window

Chris DentPowerShell DeveloperCommented:

Hmm Firstname and lastname introduces a serious amount of work. We cannot guarantee unique matches on those, do you prefer to aim for getting the username? Or do we go ahead with just those?

I'll pop together some samples in Vb.NET for you to play with.

Chris DentPowerShell DeveloperCommented:

The attached shows how we might use the DirectorySearcher to find users when all we have is the givenName and sN attributes.

The match isn't certain we must use FindAll(), because of the size of the domain we're likely to contend with multiple results for each search.

The attribute that contains the information you're after is "homeMDB". It contains everything, although getting that information out of the string takes a bit of work.

imports System.DirectoryServices
Dim searchFilter As String = "(&(givenName=Chris)(sn=Dent))"
Dim domainRoot As New DirectoryEntry()
Dim ldapSearch As New DirectorySearcher(domainRoot, searchFilter)
Dim ldapSearchResults As SearchResultCollection = ldapSearch.FindAll()
Dim ldapSearchResult As SearchResult
For Each ldapSearchResult In ldapSearchResults
   Label1.Text = ldapSearchResult.Properties("homemdb")(0).ToString()

Open in new window

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

ach_patilConnect With a Mentor Commented:
Ok, heres a sample script for you. I wrote this script to create a lost of users created between 2 specific dates. it generates the user's name, email. I have modified for it to display homeMDB attribute which gives you the user Mailbox information.

You will need to change the LDAP path to your OU.

'On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("c:\UserReports\useroutput.csv")
Dim conn,cmd,RS,dt1,dt2,dt3,dt4,strQuery,OUContainer
Wscript.StdOut.Write "Enter Start Date: "
dtstart = Wscript.StdIn.Readline
Wscript.StdOut.Write "Enter End Date: "
dtend = Wscript.StdIn.Readline
Set conn=CreateObject("ADODB.Connection")
Set cmd=CreateObject("ADODB.Command")
Set OUContainer=GetObject("LDAP://OU=USERS,DC=domain,DC=com")
'Set myDomain=GetObject("LDAP://"&OUContainer.get("DefaultNamingContext"))
strQuery="Select givenname,sn,displayName,mail,homeMDB,WhenCreated from '" & _
 OUContainer.AdsPath & "' Where objectcategory='person' AND objectclass='user'"  
set cat=GetObject("GC:")
for each obj In cat
 set GC=obj
conn.Open "Active Directory Provider"
cmd.Properties("Page Size") = 100
cmd.Properties("Timeout") =30
cmd.Properties("Cache Results") = False
set RS=cmd.Execute 
'Wscript.Echo " "& dt1 &" , "& dt2 &" "
do While not RS.EOF
If RS.Fields("WhenCreated").Value > CDate(dtstart) AND RS.Fields("WhenCreated").Value <= cDate(dtend) Then
objFile.WriteLine(rs.Fields("displayName")& "," &RS.Fields("givenname")& "," &RS.Fields("sn")& "," &RS.Fields("mail")& "," &RS.Fields("homeMDB")) 
End If

Open in new window

fatcoAuthor Commented:
Sorry for the delay and thanks for the suggestions. I posted this question just before taking a few days off so I am just now getting back to it. This is exactly what I am looking for, some examples of scripts to mine out this information. I'll look these over this afternoon and respond.

fatcoAuthor Commented:
As I am not highly experienced with running scripts it will take me a little time to work with these but I am confident they will be a good starting point to complete my project. Thanks for the help!
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.