Соединение LDAP с AD и поиск по всем Пользователям во всех подразделениях - PullRequest
0 голосов
/ 12 февраля 2020

Я использую код от: Как я могу получить список пользователей из активного каталога? , чтобы получить всех пользователей из моей AD.

Теперь я пытаюсь подключиться через LDAP к Домен для получения всех пользователей из этой Active Directory со следующими изменениями:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "192.168.1.100", "Username@testdomain.local", "Password"))

В testdomain.local есть 2 разных подразделения с пользователями, но я получаю пользователей только одного подразделения? Я думал, что дает мне всех пользователей из всех подразделений из AD?

Если я использую следующее для моего текущего домена AD, тогда я получу всех пользователей из всех подразделений?

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, currentDomain))

Может ли это быть проблемой конфигурации в другом домене или код не работает с подключением LDAP?

Спасибо

ОБНОВЛЕНИЕ:

Код:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "192.168.1.100", "Username@testdomain.local", "Password"))
{
    using (PrincipalSearcher searcher = new PrincipalSearcher(new UserPrincipal(context)))
    {
        foreach (var result in searcher.FindAll())
        {
            DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
            de.Properties["samAccountName"].Value
        }
        catch (Exception c)
        {
        }
        result.Dispose();
    }
}

1 Ответ

0 голосов
/ 12 февраля 2020

Приведенный выше код работает нормально и извлекает все записи без ошибок и пропусков. Я бы рекомендовал изменить доменное имя с IP-адреса на testdomain.local и имя пользователя без @ testdomain.local.

Если вы хотите получить samAccountName или другие свойства и преобразовать их в DirectoryEntry, я бы порекомендовал следующий маршрут, который использует DirectorySearcher. Это обеспечивает лучшую производительность и ищет во всех подразделениях.

DirectoryEntry entry = new DirectoryEntry("LDAP://DC=testdomain,DC=local", "username", "password");
string searchQuery = $"(&(objectCategory=user)(objectClass=user))";

var listOfUsers = new List<string>();
DirectorySearcher ds = new DirectorySearcher(entry, searchQuery,
                            new string[] { "samAccountName" });
ds.SizeLimit = int.MaxValue;
ds.PageSize = int.MaxValue;
foreach (SearchResult user in ds.FindAll())
{
    string samAccountName = user.Properties["samAccountName"][0].ToString();
    Console.WriteLine(samAccountName);
    listOfUsers.Add(samAccountName);
}
...