异步获取活动目录用户

Get Active directory user asynchonously

如何异步查询活动目录。 我有一些代码可以让用户同步

    Dim UserName as string = ""
    Dim Password as string = ""
    Dim LDAPPath As String = ""
    Dim DirectoryE As DirectoryEntry = New DirectoryEntry(LDAPPath, UserName, Password)

    Dim RootDSE As DirectoryServices.DirectoryEntry = globalroot
    Dim objSearch As New System.DirectoryServices.DirectorySearcher(RootDSE)
    Dim oResult As DirectoryServices.SearchResultCollection = Nothing
    'objSearch.PropertiesToLoad.Add("uid")
    'objSearch.PropertiesToLoad.Add("cn")


    objSearch.Filter = "(&(objectcategory=user))"
    objSearch.PageSize = 500
    oResult = objSearch.FindAll
    For Each ldentry As SearchResult In oResult
        Console.WriteLine(ldentry.Properties("cn")(0).ToString)
    Next
    Console.ReadLine()

假设您使用的是 .NET 4.5。将您的代码更改为 returns a SearchResultCollection:

的函数
 Private Function GetAllUsers() As SearchResultCollection
        Dim UserName As String = ""
        Dim Password As String = ""
        Dim LDAPPath As String = ""
        Dim DirectoryE As DirectoryEntry = New DirectoryEntry(LDAPPath, UserName, Password)

        Dim RootDSE As DirectoryServices.DirectoryEntry = New DirectoryEntry("LDAP://RootDSE")
        Dim objSearch As New System.DirectoryServices.DirectorySearcher(RootDSE)
        Dim oResult As DirectoryServices.SearchResultCollection = Nothing
        'objSearch.PropertiesToLoad.Add("uid")
        'objSearch.PropertiesToLoad.Add("cn")

        objSearch.Filter = "(&(objectcategory=user))"
        objSearch.PageSize = 500
        Return objSearch.FindAll

    End Function

然后这样称呼它:

 Private Async Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click

        For Each ldentry As SearchResult In Await Task.Run(Function() GetAllUsers())
            Console.WriteLine(ldentry.Properties("cn")(0).ToString)
        Next
        Console.ReadLine()
    End Sub