Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Поиск в Active Directory всех соответствующих объектов

Автор вопроса: HiTechОтветов: 1
  • Цель: я хотел бы запрашивать в AD как пользователей, так и компьютерные объекты, используя пространство имен System.DirectoryServices.AccountManagement. (Пример: выполните поиск по ключевому слову "Тест", и я получу учетные записи пользователей и учетные записи компьютеров, содержащие "Тест").

  • В настоящее время я использую два метода ниже для достижения этой цели. Если это возможно, я хотел бы объединить оба этих метода в один. Я пробовал играть с классом AdvancedFilters, но безуспешно =(

  • Еще один пример того, что я ищу: в PowerShell с помощью модуля AD я могу использовать такую ​​​​команду Get-ADObject -Filter 'SamAccountName -like "*test*"', чтобы делать именно то, что мне нужно.

Запросить компьютеры:

    public PrincipalSearchResult<Principal> GetADComputer(string pcName)
    {
        PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
        ComputerPrincipal computer = new ComputerPrincipal(ctx);
        computer.Name = String.Format("*{0}*", pcName);

        PrincipalSearcher searcher = new PrincipalSearcher();
        searcher.QueryFilter = computer;

        return searcher.FindAll();
    }

Запросить пользователей

    public PrincipalSearchResult<Principal> GetADUser(string userName)
    {
        PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

        UserPrincipal user = new UserPrincipal(ctx);
        user.SamAccountName = String.Format("*{0}*", userName);

        PrincipalSearcher searcher = new PrincipalSearcher();
        searcher.QueryFilter = user;

        return searcher.FindAll();
    }

active-directorywinformsdirectoryservices

Ответы

Ответ 1 · рейтинг 2 · Matt B-L

Я не уверен в AccountManagement, но я бы добился этого с помощью DirectoryServices:

DirectoryEntry de = new DirectoryEntry("LDAP://myldapserver.com");
DirectorySearcher directorySearcher = new DirectorySearcher(de);
directorySearcher.Filter = "(&(|(objectclass=user)(objectclass=computer))(samaccountname=*"+objectName+"*))";
SearchResultCollection srCollection = directorySearcher.FindAll();

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы