[英]Active Directory User Group Membership
我試圖獲得用戶組成員資格並將結果限制為匹配字符串的成員,即我只對組中以“test-”開頭的用戶組成員身份感興趣。
以下是我一直在玩的內容,即使用戶是與搜索字符串匹配的幾個組的一部分,If語句也沒有在其中任何一個上返回True。
Private Function GetGroups(ByVal userName As String) As Collection
Dim Groups As New Collection
Dim intCount As Integer
Dim entry As DirectoryEntry = ADEntry()
Dim mySearcher As DirectorySearcher = New DirectorySearcher(entry)
Dim arrList As New ArrayList()
' Limit the search results to only users
mySearcher.Filter = "(&(ObjectClass=User)(CN=" & userName & "))"
' Set the sort order
mySearcher.PropertiesToLoad.Add("MemberOf")
Dim searchResults As SearchResultCollection = mySearcher.FindAll()
MessageBox.Show(searchResults.Count)
If searchResults.Count > 0 Then
Dim group As New DirectoryEntry(searchResults(0).Path)
For Each member As Object In group.Properties("MemberOf")
MessageBox.Show("Pre: "+ member) 'This message box returns all the groups the user is apart of.
If group.Properties("memberOf").Contains("test-") = True Then
MessageBox.Show(member) ' This message box never shows
End If
Next
End If
Return Groups
End Function
是否有任何方法可以應用搜索或If語句再次使用約束為通配符的Object?
我正在尋找的團體可能是大約60個之一(隨着工作人員的離開,這個數量會增加和減少)。
我使用的是VB.NET 2.0。
謝謝,
馬特
LDAP搜索過濾器允許您使用*
作為通配符,因此您應該能夠通過將過濾器更改為以下內容來將搜索限制為所需的用戶:
(&(ObjectClass=User)(CN=" & userName & ")(memberOf=test-*))
這應該比循環並限制代碼中的結果更有效。
查看Microsoft有關LDAP過濾器的文檔可能會有所幫助。
在我看來,你應該搜索用戶所在的組。 例如,如果您檢查的用戶的CN
是CN=Test,CN=Users,DC=mydomain,DC=local
,那么相應的LDAP查詢應該是
(&(cn=test-*)(objectCategory=group)(member=CN=Test,CN=Users,DC=mydomain,DC=local))
作為應加載的屬性,您應該選擇組LDAP對象的屬性。
確保您要查詢的組是“全局組”。 我在組成員身份代碼工作方面遇到了很多麻煩。 對我來說唯一有效的方法就是該集團是一個“全球集團”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.