私がチェックしましたこれすでに投稿されています。しかし、私の質問への回答にはなりません。特定のユーザーがメンバーになっているすべての Active Directory グループを取得したいのです。
次のコードを書きました。しかし、フィルターの指定方法やプロパティへのアクセス方法がわからないため、先に進めません。
class Program
{
static void Main(string[] args)
{
DirectoryEntry de = new DirectoryEntry("LDAP://mydomain.com");
DirectorySearcher searcher = new DirectorySearcher(de);
searcher.Filter = "(&(ObjectClass=group))";
searcher.PropertiesToLoad.Add("distinguishedName");
searcher.PropertiesToLoad.Add("sAMAccountName");
searcher.PropertiesToLoad.Add("name");
searcher.PropertiesToLoad.Add("objectSid");
SearchResultCollection results = searcher.FindAll();
int i = 1;
foreach (SearchResult res in results)
{
Console.WriteLine("Result" + Convert.ToString(i++));
DisplayProperties("distinguishedName", res);
DisplayProperties("sAMAccouontName", res);
DisplayProperties("name", res);
DisplayProperties("objectSid", res);
Console.WriteLine();
}
Console.ReadKey();
}
private static void DisplayProperties(string property, SearchResult res)
{
Console.WriteLine("\t" + property);
ResultPropertyValueCollection col = res.Properties[property];
foreach (object o in col)
{
Console.WriteLine("\t\t" + o.ToString());
}
}
}
何か案は?
ベストアンサー1
使用すべきシステム.ディレクトリサービス.アカウント管理はるかに簡単です。ここに素敵なコードプロジェクトがあります記事この DLL 内のすべてのクラスの概要を示します。
ご指摘のとおり、現在のアプローチではプライマリグループを見つけることができません。実際、思ったよりもずっと悪いです。別のドメインのドメインローカルグループなど、うまくいかないケースがいくつかあります。ここ詳細については、こちらをご覧ください。System.DirectoryServices.AccountManagement を使用するように切り替えた場合のコードは次のようになります。次のコードでは、このユーザーが割り当てられた直下のグループ (プライマリ グループを含む) を見つけることができます。
UserPrincipal user = UserPrincipal.FindByIdentity(new PrincipalContext (ContextType.Domain, "mydomain.com"), IdentityType.SamAccountName, "username");
foreach (GroupPrincipal group in user.GetGroups())
{
Console.Out.WriteLine(group);
}