msw*_*win 6 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");
Run Code Online (Sandbox Code Playgroud)
如果我的组有来自其他域的用户,例如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);
}
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法可以传递根域的上下文,这样无论用户所属的域如何,代码都可以工作.我在下面试过,没有运气:
private PrincipalContext context =
new PrincipalContext(ContextType.Domain, "mycorp.com");
Run Code Online (Sandbox Code Playgroud)
要么
private PrincipalContext context =
new PrincipalContext(ContextType.Domain, "DC=mycorp,DC=com");
Run Code Online (Sandbox Code Playgroud)
And*_*per 14
试试这个:
new PrincipalContext(ContextType.Domain, "xyz.mycorp.com:3268", "DC=mycorp,DC=com");
Run Code Online (Sandbox Code Playgroud)
这将使用本地域控制器上的全局编录服务创建PrincipalContext(当然,这假设您的本地DC也是GC).这将允许搜索整个森林.