Преобразование отличительного имени в каноническое имя

Можно ли с помощью System.DirectoryServices (т. е. класса DirectoryEntry) преобразовать атрибут DistinguishedName или получить каноническое имя, которое обычно отображается в оснастке Active Directory Users & Computers? Я понимаю, что могу сделать это с помощью регулярных выражений, но я бы предпочел более надежный подход.

Например, я хочу преобразовать это

CN=Murdock\, James,OU=Disabled Users,OU=GOG,DC=contoso,DC=local

к этому

contoso.local/GOG/Disabled Users/Мердок, Джеймс


person Drew Chapin    schedule 21.04.2014    source источник


Ответы (2)


Это сконструированный атрибут. В DirectoryEntry вам нужно использовать RefreshCache:

var de = new DirectoryEntry("CN=Murdock\, James,OU=Disabled Users,OU=GOG,DC=contoso,DC=local");
de.RefreshCache(new string[] {"canonicalName"});
person user2871239    schedule 09.05.2014
comment
И используя System.DirectoryServices.AccountManagement ? UserPrincipal.DistinguishedName - person Kiquenet; 04.06.2019
comment
Вам нужно будет указать это в своем собственном вопросе - TPTB в Stackoverflow не любит дополнительные вопросы в комментариях. Обязательно добавьте сюда ссылку на новый вопрос. - person user2871239; 06.06.2019

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

userDe.Properties["canonicalName"][0].ToString()
person codingChris    schedule 21.04.2014
comment
Это свойство не существует. По крайней мере, не в моем окружении. - person Drew Chapin; 21.04.2014
comment
Извините, я должен был быть более тщательным. canonicalName — это свойство, которое необходимо указать. Это сконструированное свойство, и, похоже, оно не возвращается со стандартным объектом DE (извините, надо было сначала проверить). Если вы используете SDS, вы можете использовать DirectorySearcher и PropertiesToLoad.Add(canonicalName) для получения значения. - person codingChris; 22.04.2014