2016-10-26 6 views
0

Каков наилучший способ получить канонический путь от DistinguishedName в активном каталоге при извлечении всех групп/пользователей? есть ли какая-либо проблема со следующей реализациейКаков наилучший способ получить канонический путь от DistinguishedName в активном каталоге C#

foreach (SearchResult entry in results) 
      { 

       var distinguishedName = entry.Properties["distinguishedName"][0].ToString(); 
       entry.RefreshCache(new string[] { "canonicalName" }); 
       var canonicalName = entry.Properties["canonicalName"][0].ToString(); 


      } 

ответ

0

Код не работает, так как SearchResult не содержит метод RefreshCache. Лучший способ конвертировать DN в CN - использовать функцию DsCrackNames.

Вам необходимо преобразовать из DS_NAME_FORMAT.DS_FQDN_1779_NAME в DS_NAME_FORMAT.DS_CANONICAL_NAME.

Подключение к Active Directory не требуется для выполнения этого преобразования. Вы должны использовать DS_NAME_FLAGS.DS_NAME_FLAG_SYNTACTICAL_ONLY флаг, а затем передать IntPtr.Zero как соединение ручка

Имейте в виду, что принципы внешней безопасности не могут быть преобразованы с помощью этой функции

Однако, если вы уже запрос DN, вы можете запросить CN также. В вашем случае следующий код должен работать:

 foreach (SearchResult entry in results) 
     { 
      var distinguishedName = entry.Properties["distinguishedName"][0].ToString(); 
      var canonicalName = entry.Properties["canonicalName"][0].ToString(); 
     } 

Если запись не содержит CN, вам нужно добавить его в DirectorySearcher как запрошенный атрибут перед выполнением AD запроса