活动目录跨域 - 使用PrincipalContext的组成员

时间:2011-07-20 20:07:39

标签: c# active-directory

我正在尝试使用c#中的DirectoryServices.AccouneManagement命名空间类来获取给定活动目录组的成员。

如果我为特定域指定了我的主要上下文对象构造函数,那么每当我从来自其他域的组访问该成员时,我遇到以下错误: “从服务器返回了推荐”。

场景是:我在根域下有不同的子域 例如:emea.mycorp.com,asia.mycorp.com,asiapacific.mycorp.com,xyz.mycorp.com

如果我从域xyz.mycorp.com运行以下代码,则对于asiapacific中的组如果我在主要上下文对象中指定了servername,我可以访问该组。

private PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, "asiapacific domain server name");

如果我的群组中有来自emea \ abcd等其他域的用户,则以下代码在UserPrincipal失败:

GroupPrincipal SearchGroup = GroupPrincipal.FindByIdentity(context, "Dev Team"); 
    GroupName = new List<string>();
    foreach (UserPrincipal p in SearchGroup.GetMembers())      
    {        
        GroupName.Add(p.SamAccountName + " " + p.DistinguishedName + " " + p.Name);  
    }

那么,有没有办法可以传递根域的上下文,这样无论用户所属的域如何,代码都可以工作。我在下面尝试过,没有运气:

private PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, "mycorp.com");

private PrincipalContext context = 
    new PrincipalContext(ContextType.Domain, "DC=mycorp,DC=com");

1 个答案:

答案 0 :(得分:14)

试试这个:

new PrincipalContext(ContextType.Domain, "xyz.mycorp.com:3268", "DC=mycorp,DC=com");

这将使用本地域控制器上的全局编录服务创建PrincipalContext(当然,这假设您的本地DC也是GC)。这将允许搜索整个森林。