0

Я написал небольшое приложение для проверки членов группы AD. Когда я выполняю следующий код на моем компьютере, он работает хорошо, SearchResult содержит свойство «member», однако, когда я запускаю тот же exe на сервере или на другом компьютере, свойство «member» отсутствует. У нас также будут изменения и исправления. Я запускаю exe с одним и тем же пользователем на каждом компьютере. Что может вызвать это?Разный результат с DirectorySearcher

... 
using (DirectorySearcher searcher = new DirectorySearcher()) 
{ 
    searcher.CacheResults = false; 
    searcher.Filter = "(&(objectClass=group)(cn=" + ADName + "))"; 
    searcher.SizeLimit = int.MaxValue; 
    searcher.PageSize = int.MaxValue; 
    if (!DirectoryEntry.Exists(ADPath)) 
    { 
     return null; 
    } 
    searcher.SearchRoot = new DirectoryEntry(ADPath); 
    using (SearchResultCollection collection = searcher.FindAll()) 
    { 
     if (collection.Count == 1) 
     { 
      return collection[0]; 
     } 
    } 
} 
... 
+0

И в ADPath вы указываете на свой активный сервер каталогов? – rene

+0

ADPath «GC: // DC = DOMAIN, DC = COMPANY, DC = com» –

ответ

0

Данные о членстве в группе не реплицируются в глобальный каталог. Иногда запрос может работать, если вам нужно подключиться к контроллеру домена с фактическими данными о членстве. На других компьютерах вы, вероятно, подключаетесь к другим контроллерам домена разных доменов, где информация недоступна.

Возможно, вы захотите подключиться к контроллеру домена в реальном домене, а не в глобальном каталоге.

+0

Вы правы, если я укажу контроллер домена, он работает хорошо, поэтому ADPath будет «GC: // Domain_Controller_IP/DC = DOMAIN , DC = COMPANY, DC = ком». Но как я могу определить правильный контроллер домена, потому что на сервере, если я запустил echo% LOGONSERVER% из cmd, он даст отличный результат, чем мой локальный компьютер. И если я запустил его из другого домена, конечно, будет и другой контроллер. Простым способом является hardcode ip, но я не хочу этого. –

+0

Вам не нужно указывать IP. Вы можете использовать что-то вроде «LDAP: // Domain_Controller_Address/DC = DOMAIN, DC = COMPANY, DC = com». – Tomer

+0

Хорошо, новый PrincipalContext (ContextType.Domain, DOMAIN) .ConnectedServer содержит правильный адрес. Спасибо за быструю поддержку! –