Получить SIP-адрес, используя VBScript - PullRequest
0 голосов
/ 26 января 2011

Я пытаюсь получить SIP-адрес пользователя, чтобы я мог использовать объект JavaScript для проверки их присутствия в Office Communicator.Вот скрипт, который я нашел, который похож на то, что я собираюсь сделать.

Option Explicit
DIM objConnection, objCommand
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open "Provider=ADsDSOObject;"

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

Dim objOU, objUser, strUPN, strSIP, SIPLine
' Bind to the OU object.
Set objOU = GetObject("LDAP://chkenergy.net/DC=chkenergy,DC=net")

' Enumerate all users in the OU.
objOU.Filter = Array("user")
For Each objUser In objOU
' Skip computer objects.
 If (objUser.Class = "user") Then
  strUPN = objUser.userPrincipalName
  strSIP = objUser.get("msRTCSIP-PrimaryUserAddress")

  wscript.echo strSIP

End If

Next

По сути, я могу получить их имя пользователя из AD, и я хотел бы передать это и получить их SIP-адресstrSIP) назад.Есть ли способ исправить этот код, чтобы выполнить эту задачу специально?

1 Ответ

0 голосов
/ 27 января 2011

Проблемы вашего опубликованного vbscript:

  1. Он перечисляет пользователя на стороне клиента, что займет много времени, чтобы найти правильного пользователя.Аналогично, вместо того, чтобы извлекать все записи из базы данных и выполнять сравнение на стороне клиента, вы выполняете SQL-запрос.Правильно?
  2. Перечисление выполняется только на одном уровне.Вы должны исправить свой код, чтобы выполнить рекурсивное перечисление.Однако, если вы исправите это для выполнения рекурсивного перечисления, это займет еще больше времени и еще больше ресурсов для выполнения вашей работы.

Прежде чем я отвечу на ваш вопрос, вот некоторые базовые базовые знания об 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
...