【问题标题】:Can't get attributes from AD using vb.net无法使用 vb.net 从 AD 获取属性
【发布时间】:2016-06-22 02:05:52
【问题描述】:

我使用下面的代码使用 VB.Net 1.1 从 AD 获取名字、姓氏、电子邮件和部门

Public Shared Function GetAttribute(ByVal username As String, ByVal pwd As String) As UserInfo
        Dim objUserInfo As New UserInfo
        Dim ObjFirstName As String = ""
        Dim ObjLastName As String = String.Empty
        Dim ObjEmail As String = ""
        Dim objDepartment As String = ""
        Dim Success As Boolean = False

        Dim LDAPAddress As String = ConfigurationSettings.AppSettings.Get("LDAPAddress")
        Dim Entry As New System.DirectoryServices.DirectoryEntry(LDAPAddress, username, pwd)
        Dim Searcher As New System.DirectoryServices.DirectorySearcher(Entry)
        Searcher.SearchScope = DirectoryServices.SearchScope.OneLevel
        Dim Filter As String = "(samAccountName=" & username & ")"
        Dim findUser As DirectorySearcher = New DirectorySearcher(Entry, Filter)
        Dim results As SearchResultCollection = findUser.FindAll


        Try
            Dim Resultsx As System.DirectoryServices.SearchResult = Searcher.FindOne
            Success = Not (Resultsx Is Nothing)

            findUser.PropertiesToLoad.Add("name")
            Dim name As String = DirectCast(Resultsx.Properties(name)(0), String)

            Dim de As System.DirectoryServices.DirectoryEntry = Resultsx.GetDirectoryEntry()
            Dim gg = de.Properties.PropertyNames()

            For Each Onn As String In gg
                Dim str As String = String.Format("{0}", Onn)
            Next

            Try
                ObjFirstName = de.Properties("GivenName").Value.ToString()


                ObjEmail = de.Properties("mail").Value.ToString()

                ObjLastName = de.Properties("sn").Value.ToString()
                objDepartment = de.Properties("department").Value.ToString()

            Catch ex As Exception
                ObjFirstName = de.Properties("DisplayName").Value.ToString()
            End Try

但我无法获得这些属性。在

Dim str As String = String.Format("{0}", Onn)

只有 15 个属性,并且没有名字、姓氏、电子邮件和部门。我做错了什么?

【问题讨论】:

    标签: vb.net active-directory attributes ldap


    【解决方案1】:

    您的代码虽然过时,但乍一看还不错。如果您坚持继续使用您的代码,我稍后再看。

    同时,这段代码应该适合你的情况:

        Dim user As DirectoryEntry = New DirectoryEntry("UserDN")
        Dim src As DirectorySearcher = New DirectorySearcher(user, "(&(objectClass=user)(objectCategory=Person))")
    
        src.PropertiesToLoad.Add("sn")
        src.PropertiesToLoad.Add("givenName")
        src.PropertiesToLoad.Add("mail")
        src.PropertiesToLoad.Add("department")
    
        Dim res As SearchResult = src.FindOne
    
        Console.WriteLine(res.Properties("sn")(0))
        Console.WriteLine(res.Properties("givenName")(0))
        Console.WriteLine(res.Properties("mail")(0))
        Console.WriteLine(res.Properties("department")(0))
    
        Console.ReadLine()
    

    【讨论】:

    • 谢谢。我试过你的代码但没有用。它说“索引超出范围。必须是非负数并且小于集合的大小。”
    • @C.PurS 如果您定义的用户的属性之一为空,这就是错误消息
    • 是的,我做错了什么。当我使用 vb 2005 时,它现在运行良好。但在 .net 1.1 中仍然无法运行
    • 它实际上也应该适用于 .NET 1.1..(来源:msdn.microsoft.com/en-us/library/…
    • 我在工作组区工作,可能是这个问题吗?但是我可以完美地验证 AD 登录,只是无法获取这些属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多