特定のユーザーのすべてのADグループを取得するにはどうすればいいですか? 質問する

特定のユーザーのすべてのADグループを取得するにはどうすればいいですか? 質問する

私がチェックしましたこれすでに投稿されています。しかし、私の質問への回答にはなりません。特定のユーザーがメンバーになっているすべての 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);
}

おすすめ記事