如何从Active Directory中仅检索活动用户(尚未禁用)

时间:2014-07-04 11:39:48

标签: c# asp.net email active-directory

我使用以下代码获取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。

1 个答案:

答案 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