代码之家  ›  专栏  ›  技术社区  ›  Lima

Active Directory用户组成员身份

  •  3
  • Lima  · 技术社区  · 15 年前

    我试图获得用户组成员资格,并将结果限制为与字符串匹配的结果,即我只对组以“test-”开头的用户组成员资格感兴趣。

    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
    

    有没有办法对约束为通配符的对象应用search或If语句?

    我要找的群体可能是60个左右的群体中的一个(这个数量会随着员工休假而增减)。

    我正在使用VB.NET 2.0.

    谢谢,

    马特

    3 回复  |  直到 15 年前
        1
  •  1
  •   Oleg    15 年前

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

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

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

        2
  •  1
  •   ig0774    15 年前

    LDAP搜索筛选器允许您使用 * 作为通配符,因此您应该能够通过将筛选器更改为:

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

    看一看可能会有帮助 Microsoft's documentation on LDAP filters .

        3
  •  0
  •   Zippit    15 年前