查找活动目录中用户的组详细信息

时间:2015-04-14 14:15:13

标签: c# active-directory

我们有一家名为'X'的公司,并使用Active Directory维护其用户。'X'已经收购了一家公司'Y''Y'有自己的AD。 Y 中的用户可以在 X 中添加为群组成员。

在整个组织(X + Y)中搜索属于 Y AD的用户时,我们可以从 Y 只。但我们需要检查用户是否是 X AD中任何组中的成员,如果存在,我们需要获取用户详细信息。

在这种情况下,有人可以提供帮助...... :)

1 个答案:

答案 0 :(得分:0)

终于得到了答案..

使用tokengroup时,我们只能从一个AD中检索用户。 而是让用户的组使用和获取内部组搜索再次获得的组.Below是执行该操作的片段....谢谢

DirectorySearcher user_search1 = new DirectorySearcher(new DirectoryEntry(ldap_root1));

                user_search1.Filter = String.Format("(&(!(userAccountControl:1.2.840.113556.1.4.803:=2))(objectCategory=user)(samaccountname={0}))", alias);
                user_search1.SearchScope = SearchScope.Subtree;
                user_search1.PropertiesToLoad.Add("memberOf");
                user_search1.PropertiesToLoad.Add("objectSid");                  
                user_search1.PropertiesToLoad.Add("userprincipalname");

                SearchResult user_result1 = user_search1.FindOne();
                DirectoryEntry entry1 = new DirectoryEntry(user_result1.Path);
                foreach (var grp in entry1.Properties["memberOf"])
                {
                    groupnames1.Append(((grp.ToString().Split('=')[1].Split(',')[0])));
                    groupnames1.Append(";");
                    DirectorySearcher Groupsearch = new DirectorySearcher(new DirectoryEntry(ldap_root1));

                    Groupsearch.Filter = String.Format("(&(!(userAccountControl:1.2.840.113556.1.4.803:=2))(objectCategory=group)(samaccountname={0}))", ((grp.ToString().Split('=')[1].Split(',')[0])));
                    Groupsearch.SearchScope = SearchScope.Subtree;
                    Groupsearch.PropertiesToLoad.Add("memberOf");
                    SearchResult group_result1 = Groupsearch.FindOne();
                    if (group_result1 != null)
                    {
                        DirectoryEntry group1 = new DirectoryEntry(group_result1.Path);
                        //group1.RefreshCache(new string[] { "tokenGroups" });
                        //groupnames = null;
                        foreach (var grp1 in group1.Properties["memberOf"])
                        {
                            groupnames1.Append(((grp1.ToString().Split('=')[1].Split(',')[0])));
                            groupnames1.Append(";");
                        }
                    }
                }
                return groupnames1.ToString().Substring(0, groupnames1.Length - 1);