2011-02-04 100 views
4

我試圖通過Visual Basic進行LDAP查詢。我沒有管理員對Active Directory的訪問權限,但我可以查看所有用戶對象。我不知道有什麼限制,如果有我通過LDAP://查詢搜索目錄。通過URL的LDAP查詢

在我正在構建的Excel應用程序中,我有一個用於輸入用戶ID的列。一旦用戶輸入用戶ID,我希望根據與該用戶關聯的服務器端信息自動填充其他列(例如,電子郵件地址)

比方說,c.Value是用戶ID值輸入到電子表格中:

strUser = "CN=" & c.Value & ",OU=User Accounts,OU=Area,OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk/"
Set objUser = GetObject("LDAP://" & strUser)

問題是這樣的 - 其中OU =區域已知,搜索成功。但是,我希望查詢檢查用戶ID的所有區域OU。據我所知,他們沒有在中央位置舉行或鏡像。在這樣的查詢中是否可以使用通配符?

有沒有人有任何其他的想法或建議,以交替的方式去做到這一點?

謝謝

湯姆

回答

4

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

  • Active Directory上的用戶對象包含許多屬性。
  • CN是用戶對象的屬性之一。它並不總是與您的登錄用戶名相同。
  • samAccountName字符串是Windows 2000以前的登錄名。這可能是你正在尋找的。
  • 對象分層存儲。用戶對象可以放在OU或容器下

要執行LDAP查詢,您需要使用ADO連接對象。您需要將LDAP查詢字符串傳遞給ADO連接對象。 LDAP查詢字符串包含四個部分。

  • 根路徑,我們開始搜索。
  • LDAP過濾
  • 返回的屬性
  • 搜索範圍

,你應該使用應該是LDAP查詢字符串類似

<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=yourusername));adspath;subtree 
  • 在上面的例子中的根路徑是<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>。這意味着開始在此級別搜索
  • 由於您正在搜索用戶,LDAP篩選器是(&(objectClass=user)(samAccountName=yourusername))。當然,您需要將yourusername替換爲代碼中的其他內容。如果你真的想這樣做對CN搜索,將其更改爲CN這裏
  • 返回的屬性是一個特殊的屬性adspath,它允許你綁定到該對象後
  • 我假設你正在試圖尋找所有用戶對象在同一個域下。所以,你的搜索範圍應該是subtree

這裏是我想它應該做你的工作

userName = "harvey" 
ldapStr = "<LDAP://OU=Users,OU=Accounts,DC=joe,DC=bloggs,DC=co,DC=uk>;(&(objectClass=user)(samAccountName=" & userName & "));adspath;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(0) 
    rs.MoveNext 
Wend 
+0

非常感謝你一個完整的樣本,你讓我在正確的軌道上。任何想要做同樣的事情我也建議在這裏查看代碼:http://www.rlmueller.net/ADOSearchTips.htm - 並在這裏查看常用用戶對象屬性列表:http:// www。 kouti.com/tables/userattributes.htm – t0mgerman 2011-02-08 10:41:49

0

你可能看到匿名風格的訪問權限。因此你可以閱讀一些默認屬性。你想要做的是確保你被認證爲擁有足夠權限讀取你感興趣的數據的用戶。

如果用戶標識實際上是用戶預Windows 2000登錄名(又名sAMAccountName),然後搜索sAMAccountName = c.Value的用戶的完整DN。

順便提一下,CN =不是短名稱的可能性非常好,而是人名和姓的一些版本,這是ADUC MMC默認模式。