如何在VB.Net中使用DirectorySearcher检索Active Directory用户的属性

时间:2018-12-21 19:20:23

标签: vb.net ldap directorysearcher

我正在尝试通过使用其登录ID和VB.Net中的DirectorySearcher.FindOne()方法来检索已知Active Directory用户的电子邮件地址,但一直无法获得任何结果。

对不起,但我是VB.Net的新手,也不知道我要去哪里。我尝试使用在网上找到的各种示例,但它们都在C#中。我已经能够将代码转换为VB,但仍然无法使用我发现的结果提取结果。在最新的示例中,我发现了here!它使用FindAll()方法并将结果放入SearchResultCollection对象中。集合最终的计数为0,因此我尝试使用FindOne()方法并将结果放入SearchResult对象。这对我也不起作用。

Public Shared Sub RetrieveUser(ByVal username As String)
        Dim propUsername As String = "samaccountname"
        Dim propFirstName As String = "givenName"
        Dim propLastName As String = "sn"
        Dim propDisplayName As String = "cn"
        Dim propMail As String = "mail"
        Dim propGuid As String = "objectguid"
        Dim results As SearchResultCollection
        Dim result As SearchResult
        Dim directoryEntry As DirectoryEntry = New DirectoryEntry("LDAP_PATH", "DOMIAIN\USERNAME", "PASSWORD", AuthenticationTypes.ServerBind)

        Using directorySearcher As DirectorySearcher = New DirectorySearcher(directoryEntry)
            directorySearcher.PropertiesToLoad.Add(propUsername)
            directorySearcher.PropertiesToLoad.Add(propDisplayName)
            directorySearcher.PropertiesToLoad.Add(propFirstName)
            directorySearcher.PropertiesToLoad.Add(propLastName)
            directorySearcher.PropertiesToLoad.Add(propMail)
            directorySearcher.PropertiesToLoad.Add(propGuid)
            directorySearcher.Filter = String.Format("({0})", "&(objectClass=user)(cn=" & username & ")")
            directorySearcher.SearchScope = SearchScope.Subtree
            '    directorySearcher.SearchRoot.AuthenticationType = AuthenticationTypes.Secure
            directorySearcher.PageSize = 100

            'results = directorySearcher.FindAll()
            result = directorySearcher.FindOne()

            'For Each result In results

            If result.Properties.Contains(propUsername) Then
                Console.WriteLine("User Name: " & result.Properties(propUsername)(0))
            End If

            If result.Properties.Contains(propGuid) Then
                    Console.WriteLine("User GUID: " & BitConverter.ToString(CType(result.Properties(propGuid)(0), Byte())).Replace("-", String.Empty))
                End If

                If result.Properties.Contains(propMail) Then
                    Console.WriteLine("Mail ID: " & result.Properties(propMail)(0))
                End If

                If result.Properties.Contains(propDisplayName) Then
                    Console.WriteLine("DisplayName: " & result.Properties(propDisplayName)(0))
                End If
            'Next


            directorySearcher.Dispose()
            directoryEntry.Dispose()
        End Using
    End Sub

0 个答案:

没有答案