如何在.Net中为InActive用户在Active Directory中过滤用户?

时间:2011-08-12 22:17:38

标签: .net active-directory

我想创建一个过滤器来获取Active目录中的所有Active用户,我使用了这个过滤器,但它没有用

searcher.Filter = string.Format(
                System.Threading.Thread.CurrentThread.CurrentCulture,
                "(&(|(samaccountname={0})(mailnickname={0}))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))",
                alias);

2 个答案:

答案 0 :(得分:1)

如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。

您可以使用PrincipalSearcher和“按示例查询”主体进行搜索:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a UserPrincipal 
// which is not enabled (not active)
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.Enabled = false;

// 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" - it could be user, group, computer.....          
}

如果您还没有 - 绝对阅读MSDN文章Managing Directory Security Principals in the .NET Framework 3.5,该文章很好地展示了如何充分利用System.DirectoryServices.AccountManagement

中的新功能

答案 1 :(得分:0)

从www.joeware.net抓取adfind,你可以用它来测试过滤器 - adfind -f "<your filter here>" -default就可以了。

您粘贴的内容看起来很准确,但我会将其范围仅限于用户:

(&(objectClass=user)(objectCategory=person)(|(samaccountname={0})(mailnickname={0}))(!(userAccountControl:1.2.840.113556.1.4.803:=2)))