2011-01-26 83 views
0

我正在嘗試獲取用戶的SIP地址,以便我可以使用JavaScript對象來檢查其在Office Communicator中的存在。這是我發現的一個腳本,與我期待的相似。使用VBScript獲取SIP地址

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在哪裏進入它?試圖瞭解是否可能有更好的方法比去公元 – 2011-01-26 15:58:50

+0

JavaScript進入它,因爲它是這個應用程序的主要邏輯源。應用程序向用戶返回一個通話輪詢時間表,並且我希望將這些用戶的每個通信人狀態都集成到該時間表中。我使用NameCtrl.GetStatus JS方法來獲得它們的存在。我需要他們的SIP地址通過該方法,所以我確信它是正確的地址。讓我知道如果你需要別的東西 – 2011-01-26 17:23:55

回答

0

您發佈的VBScript問題

  1. 它枚舉客戶端上的用戶,這將需要大量的時間找到正確的用戶。同樣,不是從數據庫中提取所有記錄並在客戶端進行比較,而是運行SQL查詢。對?
  2. 枚舉僅在一個單一級別完成。你必須修復你的代碼來做遞歸枚舉。但是,如果您修復它以執行遞歸枚舉,那麼需要更長的時間和更多的資源才能完成您的工作。

在我回答你的問題之前,以下是關於Active Directory的一些基本背景知識。

  • Active Directory上的用戶對象包含許多屬性。
  • 特別是,samAccountName是您的Windows 2000之前的名稱。
  • 的UserPrincipalName是在[email protected]

格式,您可以使用ADO連接對象actully執行查詢。由於您綁定到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