Searching Active Directory (VBScript)

If, like me, you have been left irritated by the search function in Active Directory Users and Computers simply not telling you WHERE a particular user or computer actually is, simply use this bit of code. It allows you to search through AD for users or computers and returns a list of what it finds and the FULL canonical name so you can actually find the damned thing.

You could of course expand this script to perform user modifications such as resetting passwords, without the need to use the AD MMC console.

Click the link to see the script.


'==========================================================================
'
' NAME: search_ad.vbs
'
' AUTHOR: Lewis Roberts
' DATE : 30/09/2005
'
' COMMENT: Returns the full canonical name of an LDAP source if found in
' the Active Directory. You can search for anything that would
' be found in Active Directory.
'
'==========================================================================

On Error Resume Next

ADSRoot = "DC=domain,DC=co,DC=uk"

Const ADS_SCOPE_SUBTREE = 2

Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection

objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE

objCommand.CommandText = _
"SELECT * FROM 'LDAP://" & ADSRoot & "' WHERE objectCategory='user' OR objectCategory='computer'"

srchTrm = LCase(InputBox("Please enter your search term.", "Active Directory Search"))
i = 0

If Len(srchTrm) < 4 or Instr(srchTrm, "=") Then
WScript.Echo "Please enter a search term in excess of 3 characters and don't use ""="""
WScript.Quit
End If

Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst

Do Until objRecordSet.EOF
strADPath = LCase(objRecordSet.Fields("adsPath").Value)

If InStr(strADPath, srchTrm) Then
Set objUser = GetObject(objRecordSet.Fields("adsPath").Value)

Select Case objUser.Class
Case "user"
strMsg = "Type: Person" & VbCrLf
strMsg = strMsg & "Name: " & objUser.DisplayName & VbCrLf
strMsg = strMsg & "Email: " & objUser.mail & VbCrLf
strMsg = strMsg & "Telephone: " & objUser.telephoneNumber & VbCrLf
Case "computer"
strMsg = "Type: Computer" & VbCrLf
strMsg = strMsg & "Name: " & objUser.Get("name") & VbCrLf
strMsg = strMsg & "OS: " & objUser.operatingSystem & VbCrLf
Case Else
strMsg = "Unidentified" & VbCrLf
End Select
strMsg = strMsg & "LDAP: " & objUser.adsPath
WScript.Echo strMsg & VbCrLf
i = i + 1
End If
objRecordSet.MoveNext
Loop

If Not i > 0 Then
WScript.Echo "No results found."
End If

This entry was posted in Scripting. Bookmark the permalink.

One Response to Searching Active Directory (VBScript)

  1. LJR says:

    Line 35 should say less than or equal to 3 but because of the way the code commenter works I’ve had to alter it.

    Sorry about this folks!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>