搜索特定文件夹,Active Directory

时间:2014-07-23 19:14:36

标签: c# active-directory

我正在尝试访问特定文件夹中所有用户的名称,但我无法找到如何执行此操作。到目前为止,我只能搜索整个活动目录并限制我的过滤器选项,但这还不够。这就是我到目前为止所做的:

DirectoryEntry dir = new DirectoryEntry("LDAP://path.local", "username", "password");
string filter = "(&(objectCategory=person)(objectClass=user);(!userAccountControl:1.2.840.113556.1.4.803:=2)(c=CA))";
string[] propertiesToLoad = new string[1] { "name" };
DirectorySearcher searcher = new DirectorySearcher(dir, filter, propertiesToLoad);
SearchResultCollection results = searcher.FindAll();
List<string> usernames   = new List<string>();
foreach (SearchResult result in results)
        {
            string name = (string)result.Properties["name"][0];
            if (name != null)
                usernames.Add(name);
        }

我如何搜索活动目录中的特定文件,例如路径是Buisness \ Canada \ Users?

2 个答案:

答案 0 :(得分:1)

如果您的域名为contoso.com,并且您想要搜索上述路径,则可以将此行设置为:

DirectoryEntry dir = new DirectoryEntry("LDAP://OU=Users,OU=Canada,OU=Business,DC=contoso,DC=com", "username", "password");

答案 1 :(得分:1)

好的,使用目录,你不应该谈论文件夹,而是 OrganizationaUnit (OU)。

所以这是你的愿景:

enter image description here

这里(使用ADSIEDIT.MSC)是LDAP愿景:

enter image description here

所以MonOU 文件夹路径是:

OU=MonOU,DC=SILOGIX-ESS01,DC=local

因此开始搜索的代码开始于此文件夹:

DirectoryEntry dir = new DirectoryEntry("LDAP://path.local/OU=MonOU,DC=SILOGIX-ESS01,DC=local", "username", "password");
string filter = "(&(objectCategory=person)(objectClass=user);(!userAccountControl:1.2.840.113556.1.4.803:=2)(c=CA))";
string[] propertiesToLoad = new string[1] { "name" };
DirectorySearcher searcher = new DirectorySearcher(dir, filter, propertiesToLoad);
SearchResultCollection results = searcher.FindAll();
List<string> usernames   = new List<string>();
foreach (SearchResult result in results)
        {
            string name = (string)result.Properties["name"][0];
            if (name != null)
                usernames.Add(name);
        }

这不是全部,您还应该使用以下方式配置搜索范围:

searcher.SearchScope = SearchScope.Subtree;

查看SearchScope的3个人。

在生产环境中的最后一件事,你应该在搜索中写下你想要检索的属性(比如在SQL查询中),以确保能够检索你想要的那些而不是过多地追溯(性能)。 / p>

  searcher.PropertiesToLoad.Add("cn");
  searcher.PropertiesToLoad.Add("objectSid");