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 - 如何检索用户的所有架构条目
C# - 使用 LDAP 检索 Active Directory 的组成员
如何使用 Spring 安全性从 Active Directory LDAP 填充 LDAP 权限?