Active Directory にクエリを実行して、Users や Administrators などの特定の単語を含むすべてのグループのリストを取得できるようにしたいと考えています。
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();