Проблемы вашего опубликованного vbscript:
- Он перечисляет пользователя на стороне клиента, что займет много времени, чтобы найти правильного пользователя.Аналогично, вместо того, чтобы извлекать все записи из базы данных и выполнять сравнение на стороне клиента, вы выполняете SQL-запрос.Правильно?
- Перечисление выполняется только на одном уровне.Вы должны исправить свой код, чтобы выполнить рекурсивное перечисление.Однако, если вы исправите это для выполнения рекурсивного перечисления, это займет еще больше времени и еще больше ресурсов для выполнения вашей работы.
Прежде чем я отвечу на ваш вопрос, вот некоторые базовые базовые знания об ActiveКаталог.
- Пользовательские объекты в Active Directory содержат ряд атрибутов.
- В частности, samAccountName - это ваше имя до Windows 2000.
- userPrincipalName имеет формат
user@domain.name
Вы можете оперативно выполнить запрос, используя объект подключения ADO.Поскольку вы привязаны к Active Directory, вы можете выполнить запрос LDAP.Строка запроса LDAP состоит из четырех частей.
- Корневой путь, с которого мы начинаем поиск.
- Фильтр LDAP
- Возвращенные атрибуты
- Область поиска
Строка запроса LDAP, которую вы должны использовать, должна выглядеть примерно так:
<LDAP://chkenergy.net/DC=chkenergy,DC=net>;(&(objectClass=user)(samAccountName=yourusername));msRTCSIP-PrimaryUserAddress;subtree
- Корневой путь в приведенном выше примере:
<LDAP://chkenergy.net/DC=chkenergy,DC=net>
. - Фильтр LDAP
(&(objectClass=user)(samAccountName=yourusername))
.Конечно, вам нужно заменить yourusername
на что-то другое внутри вашего кода.Я предполагаю, что вы можете передать samAccountName.Если это не так, вам нужно изменить фильтр самостоятельно. - Возвращенные атрибуты
msRTCSIP-PrimaryUserAddress
.Я думаю, это то, что вам нужно.Правильно? - Я предполагаю, что вы пытаетесь найти все объекты пользователя в одном домене.Итак, ваша область поиска должна быть
subtree
Вот полный пример, который, я думаю, должен выполнять вашу работу
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