Я разместил свой ответ в другой теме, а затем нашел эту тему, задающую аналогичный вопрос.
Я попробовал предложенные методы, но всегда получаю недопустимое исключение приведения при приведении к DictionaryEntry. А с DictionaryEntry такие вещи, как FirstOrDefault, являются прикольными. Итак, я просто делаю это:
var directoryEntry = adUser.GetUnderlyingObject() as DirectoryEntry;
directoryEntry.RefreshCache();
var propNames = directoryEntry.Properties.PropertyNames.Cast<string>();
var props = propNames
.Select(x => new { Key = x, Value = directoryEntry.Properties[x].Value.ToString() })
.ToList();
Имея это, я могу легко запросить любое свойство напрямую по ключу. Использование операторов объединения и безопасной навигации позволяет использовать по умолчанию пустую строку или что-то еще.
var myProp = props.FirstOrDefault(x => x.Key == "someKey"))?.Value ?? string.Empty;
И если бы я захотел просмотреть все реквизиты, это был бы похожий foreach.
foreach (var prop in props)
{
Console.WriteLine($"{prop.Key} - {prop.Value}");
}
Обратите внимание, что объект "adUser" является объектом UserPrincipal.