Active Directory-获取属于某个管理器的所有用户

本文关键字:用户 管理器 Directory- 获取 属于 Active | 更新日期: 2023-09-27 18:20:37

我有这个小问题。

我想得到所有拥有相同管理器的用户。

目前,我有可以做到这一点的代码,但问题是它得到了所有用户。然后,我循环浏览所有用户,并匹配管理器。问题是,当有10万用户时,这将花费太长时间。

我当前的代码:

        UserPrincipal managerP = UserPrincipal.FindByIdentity(GetPrincipalContext(), IdentityType.SamAccountName, sAMManager);
        if (managerP != null)
        {
            using (UserPrincipal user = new UserPrincipal(GetPrincipalContext()))
            {
                using (PrincipalSearcher search = new PrincipalSearcher(user))
                {
                    search.QueryFilter = user;
                    foreach (UserPrincipal userP in search.FindAll())
                    {
                        if (managerP.SamAccountName.ToLower() == sAMManager.ToLower())
                        {
                            //Add 'userP' to list.
                        }
                    }
                }
            }
        }

我如何改变这一点,以便我可以获得属于某个经理的所有用户,而不是先获得所有用户?

Active Directory-获取属于某个管理器的所有用户

您可以使用一个简单的LDAP查询:

        using (DirectorySearcher searcher = new DirectorySearcher(new DirectoryEntry("LDAP://contoso.com")))
        {
            searcher.Filter = "(&(objectCategory=person)(objectClass=user)(manager=CN=John Doe,CN=Users,DC=contoso,DC=com))";
            searcher.PropertiesToLoad.AddRange(new string[] { "givenName", "sn", "sAMAccountName" });
            foreach (SearchResult item in searcher.FindAll())
            {
                Console.WriteLine(String.Format("User {0} {1} ({2}) works for John Doe", item.Properties["givenName"].ToString(), item.Properties["sn"].ToString(), item.Properties["sAMAccountName"].ToString()));
            }
        }