Запрос PrincipalSearcher для содержания нескольких строк
Я хочу быть в состоянии запросить активный каталог дать список всех групп, содержащих определенные слова, такие как пользователи или администраторы ниже, это то, что я получил до сих пор
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
qbeGroup.DisplayName = "Administrators";
qbeGroup.DisplayName = "Users";
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
return srch.FindAll().Select(g => g.Name).ToArray();
Этот код даже не отфильтровывает имена групп, которые не являются администраторами или пользователями. Но в любом случае, я не могу понять, как запросить, содержит ли имя группы? а не если имя группы равно и как это сделать из нескольких строк.
Я могу сделать то же самое, используя DirectoryEntry, поэтому я поставил его здесь для справки
var groups = new List<string>();
var path = string.Format("LDAP://CN=Users,DC=company,DC=com");
var computerEntry = new DirectoryEntry(path);
if (computerEntry != null)
{
using (computerEntry)
{
var userNames =
from DirectoryEntry childEntry
in computerEntry.Children
where childEntry.SchemaClassName == "Group"
select childEntry.Name;
foreach (var name in userNames)
{
if (name.Contains("Administrators") || name.Contains("Users"))
{
groups.Add(name);
}
}
}
}
return groups.ToArray();
1 ответ
Решение
Я сделал это с помощью цикла foreach Но следующий код все еще не отвечает на мой вопрос о том, как это сделать для Principalsearcher
var groups = new List<string>();
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
foreach (var group in srch.FindAll())
{
if (group.Name.Contains("Administrators") || group.Name.Contains("Users"))
{
groups.Add(group.Name);
}
}
return groups.ToArray();