2015-11-05 2 views
0

У меня есть эта небольшая проблема.Active Directory - получить всех пользователей Принадлежность к менеджеру

Я хочу, чтобы все пользователи имели тот же менеджер.

В настоящее время у меня есть код, который может это сделать, но проблема в том, что он получает ВСЕ пользователей. Затем я просматриваю всех пользователей и сопоставляю их с менеджером. Проблема в том, что это займет слишком много времени, если, скажем, 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

Спасибо :), проблема решена :) –

Смежные вопросы