【问题标题】:Search Users in Specific OU Active Directory在特定 OU Active Directory 中搜索用户
【发布时间】:2015-01-07 10:49:48
【问题描述】:

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

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

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

请帮助我使用 ldap 查找特定用户的用户

【问题讨论】:

    标签: c# active-directory ou


    【解决方案1】:

    您可以使用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 的“示例查询”。

    【讨论】:

    • 感谢您的回复。但我必须使用 ldap 来做到这一点
    • @MuhammadTaqi:我的回复 IS 使用 LDAP!
    【解决方案2】:

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

    using (var entry = new DirectoryEntry($"LDAP://OU={unit},OU=Accounts,DC={domain},DC=local"))
    {
        // Setup your search within the directory
        var search = new DirectorySearcher(entry)
        {
            Filter = "(&(objectCategory=person)(objectClass=user)(memberOf=*))"
        };
    
        // Set the properties to be returned
        search.PropertiesToLoad.Add("SamAccountName");
    
        // Get the results
        var results = search.FindAll();
    
        // TODO Process the results as needed...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      相关资源
      最近更新 更多