如何为.net中的非活动用户过滤活动目录中的用户



我想创建一个过滤器来获取Active directory中的所有Active用户,我使用了这个过滤器,但它不起作用

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

如果你使用的是。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文章管理目录安全主体在.NET框架3.5中,很好地展示了如何充分利用System.DirectoryServices.AccountManagement的新特性

从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)))

相关内容

  • 没有找到相关文章