2015-11-05 62 views
0

我有这个小问题。活动目录 - 获取所有用户属于经理

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

目前,我有代码可以做到这一点,但问题是它得到所有的用户。然后,我循环遍历所有用户,并匹配经理。 这样做的问题在于,如果有100 000个用户,这会花费太多时间。

我当前的代码:

 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. 
         } 
        } 
       } 
      } 
     } 

如何我可以改变这一点,这样我可以得到所有的用户属于管理者,而不是让他们都第一?

回答

1

你可以用一个简单的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())); 
      } 
     } 
+0

谢谢:),问题解决了:) –

相关问题