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

Posted

技术标签:

【中文标题】Active Directory - 如何检索用户的所有架构条目【英文标题】:Active Directory - how to retrieve all schema entries for a user 【发布时间】:2009-10-12 18:19:09 【问题描述】:

我想开发一个员工目录应用程序,列出组织中的所有人员,包括姓名、电子邮件地址、电话号码、办公地点 - 所有这些信息。我们目前在 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 each 循环。

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

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

谢谢...

【问题讨论】:

如果你需要,我可以给你一些我的应用程序的源代码。这是一个AD管理系统。相当大的工具。我的 Skype id 是 ifesdjeen 【参考方案1】:

当您使用 DirectorySearcher 时,您应该指定要加载的确切属性 (PropertiesToLoad)。当我处理大量的 AD 数据时,将 DirectoryEntry 的实例放入 ADPath 对我来说更有用。如果您这样做,您可以自己征用这些属性。

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

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

【讨论】:

【参考方案2】:

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

您需要为链接服务器命名,例如 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 获取用户名、电子邮件、电话号码等。

【讨论】:

OK - 在“新建链接服务器”对话框中,服务器类型、提供程序、数据源和类似值的值。我想我需要阅读“链接服务器”的概念....但我假设我可以创建一个 SQL 数据源,其连接字符串指向链接有 ADSI 服务器的数据库 - 然后我使用如您在上面给出的示例中进行的子选择。 您好,Ken,您需要为其命名,提供程序是:Microsoft Directory Services 的 OLE DB 提供程序。产品名称为“Active Directory 服务接口”。数据源是:ActiveDirectory。【参考方案3】:

你们在运行 SQL Server 吗?

如果你是这样的话,这会简单得多,然后你可以将 ADSI 添加为链接服务器并提取所有相关的 AD 信息。

告诉我

【讨论】:

是 - 运行 SQL Server 2005(很快将包括 SQL Server 2008)【参考方案4】:

刚刚发现我认为我遇到的问题 - 未返回属性 - 不正确。在 SearchResult 集合中,列表中包含的唯一属性是该 AD 记录具有实际值的属性。

【讨论】:

这不太相关。 SearchResult 集合检索通过 PropertiesToLoad 设置的那些记录...

以上是关于Active Directory - 如何检索用户的所有架构条目的主要内容,如果未能解决你的问题,请参考以下文章

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

访问Azure Active Directory用户和角色

C# - 使用 LDAP 检索 Active Directory 的组成员

如何使用 Spring 安全性从 Active Directory LDAP 填充 LDAP 权限?

C#:如何在启用 SSL 的情况下连接到 Active Directory?

从Active Directory检索对象