是否有人知道使用DirectoryServices
在Active Directory中搜索单个用户的最佳方式?我的代码目前列出了给定LDAP路径下的所有子'OU',但我现在想要在路径下添加搜索用户的功能。代码是否可以适应搜索用户?
我已经包含了列出当前OU中所有用户的代码:
DirectoryEntry Ldap = new DirectoryEntry("LDAP://" + ouselect.SelectedValue + ";" + LDAPRoot, LDAPUser, LDAPPass);
DirectorySearcher ad_search = new DirectorySearcher(Ldap);
ad_search.Filter = "(objectClass=User)";
ad_search.SearchScope = SearchScope.Subtree;
ad_search.PropertiesToLoad.Add("samaccountname");
任何人都可以提供的任何指针都非常棒。
答案 0 :(得分:2)
如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。在这里阅读所有相关内容:
基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:
// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName");
if(user != null)
{
// do something here....
}
}
新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!
PS:PrincipalContext
为其构造函数提供了许多不同的重载 - 您还可以定义用于查询Active Directory的用户名/密码,如果需要,还可以定义“起始”容器至。 Check out the MSDN documentation for details on this
答案 1 :(得分:0)
你的代码几乎就在那里。只需更改过滤器即可搜索特定的AD属性,而不是所有用户。
ad_search.Filter = string.Format("(department={0})", department);
ad_search.Filter = string.Format("(displayName={0})", "James Doe");
ad_search.Filter = string.Format("(sAMAccountName={0})", "some.username");