我正在使用用户 ID(用户名)从 AD 获取他/她的信息。我想知道是否可以使用其他标准(例如姓氏、电子邮件地址等)来做同样的事情。
这就是我现在要过滤掉用户的用户:
string adPath = ConfigurationManager.AppSettings["ADPath"].ToString();
DirectoryEntry de = new DirectoryEntry(adPath);
DirectorySearcher deSearch = new DirectorySearcher();
deSearch.SearchRoot = de;
string sFilter = String.Format("(&(objectClass=user)(SAMAccountName={0}))", UserID);
deSearch.Filter = sFilter;
deSearch.SearchScope = SearchScope.Subtree;
SearchResult results = deSearch.FindOne();
谢谢。
编辑(使用 Mrc_S 的建议):
using (adPrincipalContext)
{
UserPrincipal qbeUser = new UserPrincipal(adPrincipalContext);
qbeUser.GivenName = "Bruce";
qbeUser.Surname = "Miller";
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
foreach (var found in srch.FindAll())
{
UserPrincipal up = (UserPrincipal)found;
PrincipalSearchResult<Principal> psr = up.GetGroups();
List<Principal> insListPrincipal = new List<Principal>();
foreach (Principal p in psr)
{
insListPrincipal.Add(p);
}
foreach (Principal gp in psr)
{
string s1 = gp.Name;
string s2 = gp.Description;
}
当我尝试在两个(内部)foreach 循环中查找用户所属的组时,在一次迭代后出现错误。该列表(“indListPrincipal”)将包含 18 个条目,第一个是“域用户”,其余是主要上下文的每个属性的错误。第二个 foreach 在第一次迭代后就死了。我得到的唯一一个是“域用户”组。似乎整个搜索结果在一次迭代后就被处理掉了。我做错了什么?