我正在尝试使用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");
答案 0 :(得分:14)
试试这个:
new PrincipalContext(ContextType.Domain, "xyz.mycorp.com:3268", "DC=mycorp,DC=com");
这将使用本地域控制器上的全局编录服务创建PrincipalContext(当然,这假设您的本地DC也是GC)。这将允许搜索整个森林。