【问题标题】:Populate List box with LDAP cn and name from a specific group使用 LDAP cn 和来自特定组的名称填充列表框
【发布时间】:2014-06-18 15:15:39
【问题描述】:

我在弄清楚这一点时遇到了一些麻烦,这就是我想要做的。我正在尝试填充一个列表框,其中“名称”作为显示的文本,“cn”作为 Active Directory 中特定组的值。我的代码在下面,它没有抛出任何错误,只是没有用任何东西填充列表框。我的猜测是我没有正确添加每个结果,但我很难过。

Dim search As DirectorySearcher = New DirectorySearcher(entry)
            search.PropertiesToLoad.Add("cn")
            search.PropertiesToLoad.Add("name")
            search.PropertiesToLoad.Add("memberOf")
            search.Filter = "(memberOf=SAO Computer Grp)"
            Dim result As SearchResultCollection = search.FindAll()
            Dim ct As Integer = result.Count                
            For i = 0 To ct
                lstEmail.DataTextField = result.PropertiesLoaded("name")
                lstEmail.DataValueField = result.PropertiesLoaded("cn")
                lstEmail.DataSource = result.Item(i)
                lstEmail.DataBind()
            Next

【问题讨论】:

    标签: asp.net vb.net listbox active-directory listboxitems


    【解决方案1】:

    尝试以下方法:

    Dim search As DirectorySearcher = New DirectorySearcher(entry)
    
    search.PropertiesToLoad.Add("cn")
    search.PropertiesToLoad.Add("name")
    search.PropertiesToLoad.Add("memberOf")
    
    search.Filter = "(memberOf=SAO Computer Grp))"
    
    Dim result As SearchResultCollection = search.FindAll()
    Dim de As DirectoryEntry
    Dim firstName, lastName As String
    
    For Each ADUsers As SearchResult In result
        de = ADUsers.GetDirectoryEntry()
        firstName = "NA"
        lastName = "NA"
    
        If de.Properties("name") IsNot Nothing 
           AndAlso de.Properties("name").Count > 0 Then
                firstName = de.Properties("name")(0).ToString()
        End If
    
        If de.Properties("cn") IsNot Nothing 
           AndAlso de.Properties("cn").Count > 0 Then
               lastName = de.Properties("cn")(0).ToString()
        End If
    
        lstEmail.Items.Add(New ListItem(firstName, lastName))
    Next
    

    【讨论】:

    • 这帮助我更接近,其中 search.Filter 实际上并没有返回任何结果,所以我认为我需要以其他方式检查组成员身份。此外,它与此一起放入列表框中的文本(来自我的特定 OU 的所有用户)不是名称,并且值字段似乎没有正确填充。
    • 您能给我一个您期望的名称和 CN 示例吗?还有你现在得到了什么?
    • 虽然我实际上并不想要 AD 属性“name”和“cn”,但它是一回事。我想要的是“cn”用户的实际名称和“SAMAccountName”他们的LoginID。列表框中每一行的内容是 DC=(mydomain)
    • 我已经更新了我的代码来使用SAMAcocount,看看你能不能得到更好的结果
    • 好的,仅供参考;上面的@lucidgold 代码完美运行,除了我必须删除 search.Filter = "(&(objectCategory=Person))" search.Filter = "(sAMAccountName=" + current_User + ")" 以及将完整的域前缀添加到广告组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多