我正在尝试访问特定文件夹中所有用户的名称,但我无法找到如何执行此操作。到目前为止,我只能搜索整个活动目录并限制我的过滤器选项,但这还不够。这就是我到目前为止所做的:
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?
答案 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)。
所以这是你的愿景:
这里(使用ADSIEDIT.MSC)是LDAP愿景:
所以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");