Нечетный результат с помощью DirectorySearcher - PullRequest
2 голосов
/ 23 августа 2011

Я использую DirectorySearcher, чтобы получить отображаемое имя всех пользователей AD с сервера AD компании, у нас около 100 тыс. Записей, и большинство результатов верны.

Но у нас около 100 пользователей отображают имя «$ CimsUserVersion2», это действительно странный результат, я проверял в outlook, который также синхронизирует отображаемое имя из AD, имя правильное

Вы сталкиваетесь с той же проблемой?

Большое спасибо

using (var de = new DirectoryEntry("LDAP://" + domain))
{
   using (var search = new DirectorySearcher(de))
   {
       search.Filter = "CN=" + userName;
       var results = search.FindAll();
       string temp = results[0].Properties["displayname"][0].ToString();

       if (string.IsNullOrEmpty(temp))
       {
          return string.Empty;
       }
       else
       {
          return temp;
       }
    }
}

Ответы [ 2 ]

0 голосов
/ 23 августа 2011

Не автоматизируйте ли вы предоставление пользователей и групп UNIX в Microsoft Active Directory с помощью « Centrify DirectControl ».

Этот инструмент использует простую объектную модель для управления специфичными для UNIX свойствами для пользователей, групп, компьютеров и зон, а также служб UNIX NIS.

Насколько я понимаю, он использует атрибуты Active-Directory для регистрации некоторой специальной информации.

UserVersion соответствует displayName:

UserVersion определяет совместимость между объектом профиля пользователя и консолью администрирования Centrify DirectControl. Единственное допустимое значение для этого атрибута: $ CimsUserVersion2 .

Например:

displayName: $ CimsUserVersion2

0 голосов
/ 23 августа 2011

Не уверен, что это проблема - но я думаю, что вам нужно сообщить поисковику, что вы хотите загрузить атрибут displayName:

using (var de = new DirectoryEntry("LDAP://" + domain))
{
   using (var search = new DirectorySearcher(de))
   {
       search.Filter = "CN=" + userName;
       search.PropertiesToLoad.Add("displayName");  // specify "displayname" to be returned from search

       var results = search.FindAll();

       string temp = results[0].Properties["displayname"][0].ToString();

       if (string.IsNullOrEmpty(temp))
       {
          return string.Empty;
       }
       else
       {
          return temp;
       }
    }
}
...