Active Directory - 如何检索用户的所有架构条目

时间:2009-10-12 18:19:09

标签: asp.net active-directory

我想开发一个员工目录应用程序,列出组织中的所有人员,包括姓名,电子邮件地址,电话号码,办公地点 - 所有这些信息。我们目前在Active Directory中有这个,我想开发一个简单的.Net应用程序,以便人们搜索和检索它。获取信息看起来很简单 - 有许多关于使用DirectorySearcher类的示例。我从

开始
    Dim objADAM As DirectoryEntry                   ' Binding object.
    Dim objGroupEntry As DirectoryEntry             ' Group Results.
    Dim objSearchADAM As DirectorySearcher          ' Search object.
    Dim objSearchResults As SearchResultCollection  ' Results collection.
    Dim strPath As String                           ' Binding path.

    objADAM = New DirectoryEntry(strPath)
    objADAM.RefreshCache()
    objSearchADAM = New DirectorySearcher(objADAM)
    objSearchADAM.Filter = "((&(objectClass=user)(objectCategory=person)))"
    objSearchADAM.SearchScope = SearchScope.Subtree
    objSearchResults = objSearchADAM.FindAll()

然后我为objSearchResults集中的每个SearchResult对象创建了一个for循环。

            If objSearchResults.Count <> 0 Then
            Dim objResult As SearchResult
            For Each objResult In objSearchResults
                objGroupEntry = objResult.GetDirectoryEntry

我还查看了所有目录条目属性 - 核心属性在那里,但如果我使用Active Directory资源管理器浏览实际用户对象,则列出了更多属性。是否有一些更复杂的Active Directory结构意味着我需要做更多只是DirectorySearcher的简单FindAll方法?

...谢谢

4 个答案:

答案 0 :(得分:2)

当您使用DirectorySearcher时,您应该指定要加载的确切属性(PropertiesToLoad)。当我操作大块的AD数据时,让一个DirectoryEntry实例进入ADPath更有用。如果你这样做,你可以自己登记属性。

另外,使用ADSI Edit工具非常方便(我认为它来自微软)。它允许您查看AD节点中的所有可能条目。

如果您需要更多信息,只需提出更准确的问题,我会尽力回答。花了一些时间调查这个话题:))

答案 1 :(得分:1)

进入管理工作室并单击服务器对象文件夹。然后展开到链接服务器并添加“新链接服务器”。您需要在此处获取完整的信息,例如本地服务器登录到远程服务器登录映射。例如,您可以在此处使用域帐户。

您需要为链接服务器命名,例如ADSI或任何您喜欢的名称。 建立此链接服务器后,您可以针对此数据编写查询,包括SELECT或INSERT查询,以将此AD数据推送到您自己的业务对象/表。

例如,这是一个拉取所有AD用户的示例查询:

 SELECT 
                *
                 FROM 
                    OPENQUERY(ADSI, 
                                   '<LDAP://YourDomainControllerGoesHere/DC=YourDomain,DC=YourDCGoesHere>;(&(objectCategory=Person)(objectClass=user)( !(userAccountControl:1.2.840.113556.1.4.803:=2)));name, sAMAccountName,userAccountControl,
                                   telephoneNumber,mobile, facsimileTelephoneNumber, mail, employeeNumber, department, company, manager, title, versionNumber, adspath, displayname, sn, comment, givenName;subtree') 
                    Rowset_1

如果您不知道LDAP://以及DC之后的内容,您将需要与网络管理员合作。执行此操作后,运行查询,您将直接从AD获取用户名,电子邮件,电话号码等。

答案 2 :(得分:0)

你们是在运行SQL Server吗?

如果您这样做更简单,那么您可以将ADSI添加为链接服务器并提取所有相关的AD信息。

让我知道

答案 3 :(得分:0)

刚刚发现我认为我遇到的问题 - 没有归还的属性 - 不正确。在SearchResult集合中,列表中包含的唯一属性是那些AD记录的实际值。