Mar*_*rco 14 c# active-directory
当我运行此查询时
// Next row is used to login to AD
DirectoryEntry entry = GetEntry(domain, adminUser, adminPassword);
// Here starts the query
DirectorySearcher search = new DirectorySearcher(entry)
{
SearchScope = SearchScope.Subtree,
Filter = "(&" +
"(objectClass=user)" +
// "(distinguishedname=*OU=Ingegneria*)" +
"(givenname=s*)" +
"(samaccountname=*100)" +
")"
};
search.PropertiesToLoad.Add("distinguishedname");
SearchResultCollection result = search.FindAll();
Run Code Online (Sandbox Code Playgroud)
我得到六个条目,这是正确的.
所有记录,如果我使用record.GetDirectoryEntry()有
distinguishedname: CN=xxx,OU=Utenti,OU=Ingegneria,DC=xxx,DC=xxx
Run Code Online (Sandbox Code Playgroud)
无论如何,如果我删除distinguishedname过滤器的一部分评论,我得到零条目!
我也试着search.PropertiesToLoad.Add("distinguishedname");没有运气.
如何distinguishedname在过滤器中搜索?
更新:
如果我尝试"(distinguishedname=*)" +在过滤器中使用,我仍然会得到六条记录,所以我想我可以搜索distinguishedname ...
UPDATE2:
我还尝试使用搜索Active Directory中的代码来使用OU的部分路径来进行OU:
Filter = "(&(objectClass=user)(ou=Ingegneria))";
Run Code Online (Sandbox Code Playgroud)
但我没有条目(如果我删除(objectClass=user)部分我有两个)
mar*_*c_s 28
如果您只想查询,那么您应该在初始连接中绑定到该容器:
// Next row is used to login to AD
string ldapPath = "LDAP://OU=Ingegneria,DC=xxx,DC=xxx";
DirectoryEntry searchRoot = GetEntry(ldapPath, adminUser, adminPassword);
// Here starts the query
DirectorySearcher search = new DirectorySearcher(searchRoot)
{
SearchScope = SearchScope.Subtree,
Filter = "(&" +
"(objectClass=user)" +
"(givenname=s*)" +
"(samaccountname=*100)" +
")"
};
search.PropertiesToLoad.Add("distinguishedname");
SearchResultCollection result = search.FindAll();
Run Code Online (Sandbox Code Playgroud)
这样,您还可以大量减少AD中需要搜索的空间,从而加快搜索速度.
如果您使用的是.NET 3.5或更高版本,则可以使用a PrincipalSearcher和"按示例查询"主体进行搜索:
// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN", "OU=Ingegneria,DC=xxx,DC=xxx");
// define a "query-by-example" principal - here, we search for a UserPrincipal
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.GivenName = "s*";
qbeUser.SamAccountName = "*100";
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach(var found in srch.FindAll())
{
// do whatever here - "found" is of type "Principal"
UserPrincipal userFound = found as UserPrincipal;
if(userFound != null)
{
// do something with your user principal here....
}
}
Run Code Online (Sandbox Code Playgroud)
如果您还没有 - 绝对阅读MSDN文章.NET Framework 3.5中的管理目录安全主体,它很好地展示了如何充分利用新功能System.DirectoryServices.AccountManagement
| 归档时间: |
|
| 查看次数: |
90185 次 |
| 最近记录: |