我们有一家名为“ X”的公司,它使用Active Directory维护其用户。“ X”购买了公司“ Y”,“ Y”有自己的广告。可以将Y中的用户添加为X中组的成员。
在整个组织(X + Y)中搜索属于Y AD的用户时,我们只能从Y中获取数据。但是我们需要检查用户是否是X AD中任何组的成员,如果存在,我们需要获取用户详细信息。
在这种情况下有人可以帮忙... :)
终于得到答案了。
使用令牌组时,我们将只能从一个AD中检索用户。取而代之的是使用和来获取用户组,然后再次在获得的组中进行内部组搜索。下面是执行此操作的代码段....谢谢
DirectorySearcher user_search1 = new DirectorySearcher(new DirectoryEntry(ldap_root1));
user_search1.Filter = String.Format("(&(!(userAccountControl))(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))(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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句