Как я могу получить список пользователей из активного каталога? Есть ли способ вытащить имя пользователя, имя, фамилию? Я видел похожий пост, где это использовалось:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
Я никогда ничего не делал с активным каталогом, поэтому я полностью потерялся. Любая помощь будет принята с благодарностью!
Ответы:
Если вы новичок в Active Directory, я предлагаю вам сначала понять, как Active Directory хранит данные.
Active Directory на самом деле является сервером LDAP. Объекты, хранящиеся на сервере LDAP, хранятся иерархически. Это очень похоже на то, как вы храните файлы в файловой системе. Вот почему он получил имя каталога сервера и в Active Directory ,
Контейнеры и объекты в Active Directory могут быть указаны с помощью файла
distinguished name
. Вот такое выдающееся имяCN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
. Как и в случае с традиционной реляционной базой данных, вы можете выполнять запросы к серверу LDAP. Это называется запрос LDAP.Есть несколько способов выполнить запрос LDAP в .NET. Вы можете использовать DirectorySearcher из
System.DirectoryServices
или SearchRequest изSystem.DirectoryServices.Protocol
.Что касается вашего вопроса, поскольку вы просите конкретно найти объект пользователя-участника, я думаю, что наиболее интуитивно понятным способом является использование PrincipalSearcher из
System.DirectoryServices.AccountManagement
. Вы можете легко найти много разных примеров в Google. Вот образец, который делает именно то, что вы просите.Обратите внимание, что у пользовательского объекта AD есть несколько атрибутов. В частности,
givenName
даст вамFirst Name
иsn
даст вамLast Name
. По поводу имени пользователя. Я думаю, вы имели в виду имя пользователя для входа в систему. Обратите внимание, что на объекте пользователя AD есть два имени для входа. Один изsamAccountName
них также известен как имя пользователя для входа в систему до Windows 2000.userPrincipalName
обычно используется после Windows 2000.источник
if (((UserPrincipal)result).EmailAddress != null)
прежде чем добавить результат в свой список.Если вы хотите отфильтровать y активных учетных записей, добавьте это в код Харви:
после первого использования. Затем добавьте
прежде чем найти все. И это должно привести вас к активным.
источник
searcher.QueryFilter = userPrin;
поскольку мы уже передаем принципала пользователя основному искателю при инициализации, но в остальном спасибо за совет по фильтрации только активных пользователей!using (var searcher = new PrincipalSearcher(new UserPrincipal(context){ Enabled = true }))
Enabled
сначала нужно проверить, имеет ли значение значение:if (userPrincipal.Enabled.HasValue)
Конечно, здесь заслуга @Harvey Kwok, но я просто хотел добавить этот пример, потому что в моем случае я хотел получить реальный список UserPrincipals. Вероятно, более эффективно отфильтровать этот запрос заранее, но в моей небольшой среде проще извлечь все, а затем фильтровать по мере необходимости позже из моего списка.
В зависимости от того, что вам нужно, может не потребоваться приведение к DirectoryEntry, но некоторые свойства недоступны в UserPrincipal.
источник
Включите System.DirectoryServices.dll, затем используйте приведенный ниже код:
источник