The problems of your posted vbscript are
- It enumerates the user on the client side, which will take a lot of time to find the correct user. Similarly, instead of pulling all the records from the database and do the comparison on your client side, you would run a SQL query. Right?
- The enumeration is done at one single level only. You have to fix your code to do recursive enumeration. However, if you fix it to do recursive enumeration, it's going to take even longer time and even more resources to do your job.
Before I answer your question, here are some basic background knowlege on Active Directory.
- User objects on Active Directory contains a number of attributes.
- In particular, samAccountName is your pre-Windows 2000 name.
- userPrincipalName is in the format of
user@domain.name
You can actully execute a query using an ADO connection object. Since you are binded to an Active Directory, you can execute a LDAP query. The LDAP query string contains four parts.
- Root path, where we start the search.
- LDAP filter
- Returned attributes
- Search scope
The LDAP query string that you should use should be something like
<LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=yourusername));msRTCSIP-PrimaryUserAddress;subtree
- The root path in the above example is
<LDAP://chkenergy.net/DC=chkenergy,DC=net>
.
- The LDAP filter is
(&(objectClass=user)(samAccountName=yourusername))
. Of course, you need to replace yourusername
to something else inside your code. I am assuming you can pass in a samAccountName. If that's not the case, you need to modify the filter yourself.
- Returned attributes is
msRTCSIP-PrimaryUserAddress
. I think that's what you need. Right?
- I am assuming you are trying to search for all user objects under the same domain. So, your search scope should be
subtree
Here is a complete sample that I guess it should do your job
userName = "harvey"
ldapStr = "<LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=" & userName & "));msRTCSIP-PrimaryUserAddress;subtree"
Set conn = CreateObject("ADODB.Connection")
conn.Provider = "ADSDSOObject"
conn.Open "ADs Provider"
Set rs = conn.Execute(ldapStr)
While Not rs.EOF
wscript.echo rs.Fields("msRTCSIP-PrimaryUserAddress")
rs.MoveNext
Wend