我想使用Active目录检索一个人的电话号码

时间:2014-10-23 08:32:07

标签: vb.net

当我尝试从Active Directory获取某个人的电话号码时,所有属性都已加载,但邮件除外。有人可以帮助您解决如何通过以下代码中的一些更改来检索电话号码吗?在myrelustpropcollection.propertynames中,只有2是计数ADSPATH和邮件。没有其他属性被加载。

Public Function GetPhoneByName(ByVal Name As String) As String
    Dim srch As DirectorySearcher
    Dim results As SearchResultCollection = Nothing
    Dim phone As Integer
    srch = New DirectorySearcher(New DirectoryEntry())
    srch.Filter = "(mailnickname=" + Name + ")"

    srch.PropertiesToLoad.Add("homephone")
    srch.PropertiesToLoad.Add("mail")
    srch.PropertiesToLoad.Add("mobile")
    srch.PropertiesToLoad.Add("telephoneNumber")

    Try
        results = srch.FindAll()
    Catch ex As Exception
    End Try

    For Each result In results
        Dim myKey As String
        Dim myResultPropCollection As ResultPropertyCollection

        myResultPropCollection = result.Properties

        For Each myKey In myResultPropCollection.PropertyNames
            Dim tab1 As String = "    "
            Dim myCollection As Object
            Select Case myKey
                Case "mobile" ' Telephone Number
                    For Each myCollection In myResultPropCollection(myKey)
                        phone = myCollection.toint
                    Next myCollection
            End Select
        Next myKey
    Next
    Return phone
End Function

1 个答案:

答案 0 :(得分:0)

这对我来说很好,代码更简洁:

Imports System.DirectoryServices.AccountManagement
Imports System.DirectoryServices
Imports System.Collections

Public Function GetPhoneByName(Name As String) As String

    Dim ctx As New PrincipalContext(ContextType.Domain, "DomainName")
    Dim q As New UserPrincipal(ctx)
    q.DisplayName = Name
    Dim s As PrincipalSearcher = New PrincipalSearcher(q)

    Dim ds As DirectorySearcher = s.GetUnderlyingSearcher
    ds.PropertiesToLoad.Clear()
    ds.PropertiesToLoad.Add("homephone")
    ds.PropertiesToLoad.Add("mail")
    ds.PropertiesToLoad.Add("mobile")
    ds.PropertiesToLoad.Add("telephoneNumber")

    For Each dsResult As SearchResult In ds.FindAll()
        For Each itm As DictionaryEntry In dsResult.Properties
            Select Case itm.Key
                Case "mobile"
                    Return itm.Value(0)
            End Select
        Next
    Next

    Return "Not found"

End Function

以下代码将从活动目录返回用户可用的所有值:

Imports System.DirectoryServices

Module AdTest

    Sub Main()
        GetPhoneByName("Persons Display Name")
        Console.ReadLine()
    End Sub

    Public Sub GetPhoneByName(ByVal Name As String)
        Dim srch As New DirectorySearcher(New DirectoryEntry())
        srch.Filter = "(displayname=" + Name + ")"

        For Each result As SearchResult In srch.FindAll()
            For Each key As DictionaryEntry In result.Properties
                For Each keyVal In result.Properties(key.Key)
                    Try
                        Console.WriteLine(key.Key + ": " + keyVal)
                    Catch ex As Exception
                        'value of keyVal could not convert to string (probably byte array)
                    End Try
                Next
            Next
        Next
    End Sub

End Module