Active Directory用户组成员身份

时间:2010-08-16 11:45:10

标签: vb.net .net-2.0

我正在尝试获取用户组成员身份并将结果限制为匹配字符串的成员,即我只对组中以“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。

谢谢,

马特

3 个答案:

答案 0 :(得分:1)

LDAP搜索过滤器允许您将*用作通配符,因此您应该可以通过将过滤器更改为以下内容将搜索限制为所需的用户:

(&(ObjectClass=User)(CN=" & userName & ")(memberOf=test-*))

这应该比循环并限制代码中的结果更有效。

查看Microsoft's documentation on LDAP filters可能会有所帮助。

答案 1 :(得分:1)

在我看来,您应该搜索用户所在的组。例如,如果您检查的用户的CNCN=Test,CN=Users,DC=mydomain,DC=local,那么相应的LDAP查询应为

(&(cn=test-*)(objectCategory=group)(member=CN=Test,CN=Users,DC=mydomain,DC=local))

作为应加载的属性,您应该选择组LDAP对象的属性。

答案 2 :(得分:0)

确保您要查询的群组是“全局群组”。我在组成员身份代码工作方面遇到了很多麻烦。对我来说唯一有用的方法就是该集团是一个“全球集团”。