我使用以下代码获取Active Directory中所有用户的电子邮件。但是,该代码还会返回已在Active Directory中禁用的用户。
如何过滤结果以仅返回拥有有效帐户的用户?
DirectoryEntry entry = new DirectoryEntry("LDAP://MyDomain");
DirectorySearcher dSearch = new DirectorySearcher(entry);
dSearch.Filter = "(objectClass=user)";
foreach (SearchResult sResultSet in dSearch.FindAll())
{
if (sResultSet.Properties["mail"].Count > 0)
Response.Write(sResultSet.Properties["mail"][0].ToString() + "<br/>");
}
我认为Active Directory中可能有一个属性来定义帐户是否被禁用,我可以使用此属性来过滤结果。
我正在使用C#.NET。
答案 0 :(得分:0)
您可以使用PrincipalSearcher
和&#34;按示例查询&#34;负责你的搜索:
// create your domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// define a "query-by-example" principal - here, we search for enabled UserPrincipal
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.Enabled = true;
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
List<string> emails = new List<string>();
// find all matches
foreach(var found in srch.FindAll())
{
UserPrincipal foundUser = found as UserPrincipal;
emails.Add(foundUser.EmailAddress);
}
}
如果您还没有 - 绝对阅读MSDN文章Managing Directory Security Principals in the .NET Framework 3.5,该文章很好地展示了如何充分利用System.DirectoryServices.AccountManagement
中的新功能。或者查看MSDN documentation on the System.DirectoryServices.AccountManagement命名空间。
您可以在UserPrincipal
上指定任何属性,并将其用作&#34;按示例查询&#34;为您的PrincipalSearcher
。