获得第一&所有AD帐户的姓氏

时间:2017-11-01 18:37:46

标签: vb.net active-directory

我正在寻找最快,最简单的方法来检索所有 Active Directory帐户的第一个&姓氏。目的是拥有一个字符串列表,其中包含Active Directory中的所有名称,以便在用于解锁帐户的小型Visual Basic应用程序的文本框中自动完成。

使用场景:

在表单加载时,应用程序会从AD生成名称列表。由于AD上有4,500个账户,我预计这需要大约10-15秒。每个名称都添加到字符串列表中,以便与自动完成一起使用。

用户将姓名Garry键入textbox1,自动完成通过使用字符串列表显示AD中的所有Garry。我知道如何轻松地做到这一点,我只是不知道如何有效地使用用户的名字填充列表。

在访问AD时有很多样本,但没有一个展示如何循环它。我认为这里的问题会对我自己和其他类似用例的用户有所帮助。

我到目前为止访问单个帐户的代码如下所示,但是我需要遍历所有 AD帐户并检索他们的First&姓氏。

访问单个帐户的当前代码:

'Domain is declared with the LDAP path
'UserName is declared with textbox1.text value

            Dim ADEntry As New DirectoryServices.DirectoryEntry("LDAP://" & Domain)
            Dim ADSearch As New System.DirectoryServices.DirectorySearcher(ADEntry)

            ADSearch.Filter = ("(samAccountName=" & UserName & ")")
            ADSearch.SearchScope = System.DirectoryServices.SearchScope.Subtree
            Dim UserFound As System.DirectoryServices.SearchResult = ADSearch.FindOne()

            If Not IsNothing(UserFound) Then
                Log.AppendLine("Account found, loading checks...")
                Dim Attrib As String = "msDS-User-Account-Control-Computed"
                Dim User As System.DirectoryServices.DirectoryEntry
                User = UserFound.GetDirectoryEntry()
                User.RefreshCache(New String() {Attrib})


                'Display user account details

                txtLogin.Text = User.Properties("userPrincipalName").ToString
                txtName.Text = User.Properties("givenName").ToString & " " & User.Properties("sn").ToString 

             else 
            'User not found
            end if 

即使在C#中,也会非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用与上面相同的ADEntry变量并执行类似的操作。如果用户同时拥有名字和姓氏,则只会将用户添加到列表中。

Dim listNames As New AutoCompleteStringCollection

Using ADSearch As New DirectoryServices.DirectorySearcher(ADEntry, "(&(objectCategory=person)(objectClass=user))", {"givenName", "sn"}, DirectoryServices.SearchScope.Subtree)
    For Each user As DirectoryServices.SearchResult In ADSearch.FindAll
        Try
            listNames.Add(user.GetDirectoryEntry.Properties("givenName").Value.ToString + " " + user.GetDirectoryEntry.Properties("sn").Value.ToString)
        Catch ex As Exception

        End Try

    Next
End Using

With TextBox1
    .AutoCompleteCustomSource = listNames
    .AutoCompleteMode = AutoCompleteMode.SuggestAppend
    .AutoCompleteSource = AutoCompleteSource.CustomSource
End With