2011-01-26 5 views
0

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

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) назад. Есть ли способ исправить этот код для выполнения этой задачи?

+0

Можете ли вы дать немного больше деталей о том, что вы пытаетесь достичь? Будет ли этот код работать на компьютере пользователя и получить собственное присутствие? или он получит другое присутствие пользователей? Будет ли установлен коммуникатор на машине, работающей с этим кодом? Где javascript ком в это? Просто пытаюсь понять, может ли быть лучший подход, чем переход на AD. –

+0

В него входит JavaScript, потому что он является основным логическим источником этого приложения. Приложение возвращает пользователю график расписания по вызову, и я хочу интегрировать присутствие каждого из этих пользователей в это расписание. Я использую метод NameCtrl.GetStatus JS, чтобы получить их присутствие. Мне нужно, чтобы их SIP-адрес прошел в этот метод, поэтому я уверен, что это правильный адрес. Дайте мне знать, если вам нужно что-нибудь еще –

+0

AH, хорошо - имеет смысл. @ Ответ Harvey ниже должен быть идеальным, тогда –

ответ

0

Проблемы Опубликованной VBScript является

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

Прежде чем ответить на ваш вопрос, ознакомьтесь с основными сведениями об Active Directory.

  • Пользовательские объекты в Active Directory содержат ряд атрибутов.
  • В частности, samAccountName - это ваше имя перед Windows 2000.
  • UserPrincipalName в формате [email protected]

Вы можете actully выполнить запрос с использованием объекта подключения 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 
+0

Все там правильно, кроме .Fields ("samAccountName") должно быть .Fields ("msRTCSIP-PrimaryUserAddress"), потому что это переменная, которую я пытаюсь извлечь. Спасибо хоть. –