2009-10-12 48 views
0

我想开发一个员工目录应用程序,列出组织中的所有人,包括姓名,电子邮件地址,电话号码,办公室位置 - 所有这些信息。我们目前在Active Directory中已有这个功能,并且我想开发一个简单的.Net应用程序来允许用户搜索和检索它。获取信息看起来很简单 - 关于使用DirectorySearcher类有很多例子。我从Active Directory - 如何检索用户的所有架构条目

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方法?

谢谢...

+0

如果你需要,我可以给你我的应用程序的一些源代码。这是AD的管理系统。相当大的工具。我的skype id是ifesdjeen – 0100110010101 2009-10-12 18:27:53

回答

2

当你使用的DirectorySearcher,应指定要加载(PropertiesToLoad)到底哪个属性。当我操纵AD数据的大块时,对DirectoryEntry的实例产生ADPath更加有用。如果你这样做,你可以为自己争取属性。

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

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

0

你们是否正在运行SQL Server?

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

让我知道

+0

是的 - 运行SQL Server 2005(并很快包含SQL Server 2008) – 2009-10-12 18:32:19

+0

好奇,看看这是如何完成的。 – mxmissile 2009-10-12 18:44:27

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获得用户名,电子邮件,电话号码等。

+0

确定 - 在“新链接服务器”对话框中,对于服务器类型,提供程序,数据源和相似值有什么值。我想我需要阅读“链接服务器”的概念....但我想我可以创建一个SQL数据源,连接字符串指向数据库的ADSI服务器链接到它 - 然后我使用你已经给出了上面的例子。 – 2009-10-12 20:08:08

+0

嗨,Ken,您需要给它一个名字,提供者是:OLE DB Provider for Microsoft Directory Services。产品名称是“Active Directory服务接口”。数据源是:ActiveDirectory。 – JonH 2009-10-13 01:50:04

0

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

+0

这是不相关的。 SearchResult集合检索通过PropertiesToLoad设置的记录... – 0100110010101 2009-10-13 08:20:27

相关问题