A. The script below, which you can download heretakes as parameters a SAM account name, an object type (e.g., user or group), and a distinguished name (DN) to start searching for the object.

   


'Check that all arguments required have been passed.  If Wscript.Arguments.Count
strObjectName = Wscript.Arguments(0)  strObjectType = Wscript.Arguments(1)  strRootSearch = Wscript.Arguments(2)    


Set objConnection = CreateObject("ADODB.Connection")  objConnection.Open "Provider=ADsDSOObject;"    


Set objCommand = CreateObject("ADODB.Command")  objCommand.ActiveConnection = objConnection    


objCommand.CommandText = _      ";(&(objectCategory=" & strObjectType & ")" & _      "(samAccountName=" & strObjectName & "));samAccountName,distinguishedName;subtree"    


Set objRecordSet = objCommand.Execute    


If objRecordset.RecordCount = 0 Then      WScript.Echo "sAMAccountName: " & strObjectName & " does not exist."      intReturnValue=0  Else      WScript.Echo strObjectName & " exists."      objRecordSet.MoveFirst      Wscript.Echo "Distinguished Name: " & objRecordSet.Fields("distinguishedName").Value      intReturnValue=1  End If    


objConnection.Close    


To use the script, just pass the name, type, and root to search, as the following two executions and output show:

  D:\projects\VBScripts>cscript searchad.vbs john user dc=savilltech,dc=com    


john exists.  Distinguished Name: CN=John Savill,CN=Users,DC=savilltech,DC=com    


D:\projects\VBScripts>cscript searchad.vbs johnnope user dc=savilltech,dc=com    


sAMAccountName: johnnope does not exist.  

The script also sets the %errorlevel% to 1 if the object is found or to 0 if it isn't found. You can then use the result in follow on scripts or logic. To view the results, use the command "echo %errorlevel%" after running the script.

Likewise, you could change the script to search by Common Name (CN) instead of samAccountName (or anything else that suits your needs) in the CommandText string. Additionally, if you entered a wildcard for the search and the script returns that the object exists, you could make a loop in case more than one match is found. The following code shows how to modify the script from the CommandText line down:

   


objCommand.CommandText = _      "<LDAP://" & strRootSearch & ">;(&(objectCategory=" & strObjectType & ")" & _      "(cn=" & strObjectName & "));sAMAccountName,cn,distinguishedName;subtree"    


Set objRecordSet = objCommand.Execute    


If objRecordset.RecordCount = 0 Then      WScript.Echo "sAMAccountName: " & strObjectName & " does not exist."      intReturnValue=0  Else      WScript.Echo strObjectName & " matched"      Do Until objRecordSet.EOF          Wscript.Echo "Name: " & objRecordSet.Fields("sAMAccountName").Value & " Distinguished Name: " & objRecordSet.Fields("distinguishedName").Value          objRecordSet.MoveNext      Loop      intReturnValue=1  End If    


objConnection.Close    


wscript.quit(intReturnValue)  

The following execution and output shows this in action:   D:\projects\VBScripts>cscript searchad.vbs b* user "ou=Justice League,dc=savilltech,dc=com"  

b* matched
Name: barry Distinguished Name: CN=Barry Allen,OU=Justice League,DC=savilltech,DC=com
Name: bruce Distinguished Name: CN=Bruce Wayne,OU=Justice League,DC=savilltech,DC=com

  D:\projects\VBScripts>echo %errorlevel%