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

  • Цель: я хотел бы запрашивать в 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();
    }

person HiTech    schedule 17.03.2014    source источник


Ответы (1)


Я не уверен в 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();
person Matt B-L    schedule 19.03.2014
comment
Спасибо за ответ. Я действительно пытаюсь сохранить весь код, связанный с AD, в классе AccountManagement. Если я не могу найти другой способ, я прибегну к этому коду. - person HiTech; 25.03.2014