1

OU レベルでは実行できないユーザー クエリがあります。グループのメンバーであるユーザーのみを返そうとしています (実際のグループ オブジェクトではなく、グループ文字列値でフィルター処理する必要があります)。現在の外観は次のとおりです。

using (var entry = new DirectoryEntry("LDAP://foo.net/DC=appName,DC=domainName,DC=com", Username, Password)) {
    using (var searcher = new DirectorySearcher()) {
        searcher.Filter = "(&(objectClass=user))";
        searcher.SearchRoot = entry;
        searcher.PropertiesToLoad.Add("memberOf");

        foreach (SearchResult sr in searcher.FindAll()) {
            var member = GetSearchResultProperty(sr, "memberOf");
        }
    }
}

このクエリは、異なるユーザー コンテナーとグループ コンテナーがある複数の OU にまたがります。

memberOfクエリを実行するときに (OU の種類を指定せずに) プロパティをフィルター処理する方法はありますか?

4

3 に答える 3

1

memberOfプロパティはグループへのフルパスである必要があるため、クエリの実行時には私がやろうとしていることができないようです。私の場合、実際にはグループ オブジェクトは気にしませんが、むしろグループ名を気にします (各 OU には異なるグループがありますが、同じグループ名を持つこともできます)。これを解決するには、後でパフォーマンスに影響を与える可能性のある別のアプローチを取らなければなりませんでした。他の誰かがこの質問を見つけて答えを探している場合に備えて、今のところ私が解決している方法は次のとおりです。

using (var entry = new DirectoryEntry("LDAP://foo.net/DC=appName,DC=domainName,DC=com", Username, Password)) {
    using (var searcher = new DirectorySearcher()) {
        searcher.Filter = "(&(objectClass=user))";
        searcher.SearchRoot = entry;
        searcher.PageSize = 5000;
        searcher.PropertiesToLoad.Add(DirectoryConstants.AD_PROPERTY_MEMBER_OF);
        searcher.PropertiesToLoad.Add(DirectoryConstants.AD_PROPERTY_DISPLAY_NAME);

        foreach (SearchResult sr in searcher.FindAll()) {
            //The memberOf property will be a string array if the user is in multiple groups.
            string[] memberOf = GetSearchResultProperties(sr, DirectoryConstants.AD_PROPERTY_MEMBER_OF);
            //Check if the user is in the group by analyzing the string.
            var group = memberOf.FirstOrDefault(m => m.StartsWith(string.Format("CN={0},", groupName)));

            if (group != null) {
                //The user is in the group!
            }
        }
    }
}
于 2013-04-05T13:56:14.623 に答える
1

フィルターに別の用語を追加するだけです。

searcher.Filter = "(&(objectClass=user)(memberOf=myGroup))";
于 2013-04-04T01:07:12.333 に答える