搜索特定OU Active Directory中的用户

时间:2015-01-07 10:49:49

标签: c# active-directory ou

我的Active Directory中针对不同的用户使用不同的OU,我希望使用C#获取特定OU的所有用户。

目前我有这个过滤器,但它返回所有OU的所有用户

(&(objectClass=User)(objectCategory=Person))

请帮助我使用ldap

查找特定用户的用户

2 个答案:

答案 0 :(得分:6)

您可以使用PrincipalSearcher和"按示例查询"负责你的搜索:

// LDAP string to define your OU
string ou = "OU=Sales,DC=YourCompany,DC=com";

// set up a "PrincipalContext" for that OU
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "Yourcompany.com", ou))
{
    // define the "query-by-example" user (or group, or computer) for your search
    UserPrincipal qbeUser = new UserPrincipal(ctx);

    // set whatever attributes you want to limit your search for, e.g. Name, etc.
    qbeUser.Surname = "Smith";

    // define a searcher for that context and that query-by-example 
    using (PrincipalSearcher searcher = new PrincipalSearcher(qbeUser))
    {
        foreach (Principal p in searcher.FindAll())
        {
            // Convert the "generic" Principal to a UserPrincipal
            UserPrincipal user = p as UserPrincipal;

            if (user != null)
            {
                // do something with your found user....
            }
        }
    }

如果您还没有 - 绝对阅读MSDN文章Managing Directory Security Principals in the .NET Framework 3.5,该文章很好地展示了如何充分利用System.DirectoryServices.AccountManagement中的新功能。或者查看MSDN documentation on the System.DirectoryServices.AccountManagement命名空间。

当然,根据您的需要,您可能希望在其上指定其他属性"按示例查询"您创建的用户主体:

  • DisplayName(通常:名字+空格+姓氏)
  • SAM Account Name - 您的Windows / AD帐户名称
  • User Principal Name - 您的" username@yourcompany.com"样式名称

您可以在UserPrincipal上指定任何属性,并将其用作"按示例查询"为您的PrincipalSearcher

答案 1 :(得分:2)

一种选择是在创建enableControlsDuringAd对象时设置组织单位(OU):

DirectoryEntry