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