Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为不同域中的用户获取UserPrincipal?_C#_.net_Active Directory - Fatal编程技术网

C# 如何为不同域中的用户获取UserPrincipal?

C# 如何为不同域中的用户获取UserPrincipal?,c#,.net,active-directory,C#,.net,Active Directory,下面的代码对我所在域的用户非常有用(例如,“TESTER”而不是“DEVELOPER”),但我不知道如何搜索比当前域更高的内容。我尝试了PrincipalSearcher类的各种搜索组合,但我不确定如何通过电子邮件地址或用户名传递搜索,以便在我的组织中查找其他域,即使它们都在一个林中 var name = "DEVELOPER\\JULIANI99"; var p = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Do

下面的代码对我所在域的用户非常有用(例如,“TESTER”而不是“DEVELOPER”),但我不知道如何搜索比当前域更高的内容。我尝试了PrincipalSearcher类的各种搜索组合,但我不确定如何通过电子邮件地址或用户名传递搜索,以便在我的组织中查找其他域,即使它们都在一个林中

var name = "DEVELOPER\\JULIANI99";
var p = UserPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain), name);

FindByIdentity
不适合搜索森林

我试过这样的方法:

var d = new PrincipalContext(ContextType.Domain, "domain.com:3268", "DC=com");
var p = UserPrincipal.FindByIdentity(d, IdentityType.SamAccountName, username);
但我一直收到一个错误,说我的推荐信被退回了。对你来说可能不一样。“3268”端口告诉它使用全局目录(全林搜索)。根(我将其命名为“DC=com”)必须是林中所有域的公共根。因此,如果您的所有域都是“domain.com”的子域,那么您可以将“DC=domain,DC=com”放在这里。但是,如果“domain.com”和“otherdomain.com”属于同一个广告林,那么这就行不通了


FindByIdentity
也不适用于通过电子邮件地址进行搜索,因此您最好使用

如果您遇到与我相同的转介错误,您可以告诉它遵循转介:

PrincipalSearcher srch = new PrincipalSearcher(User);
((DirectorySearcher) srch.GetUnderlyingSearcher()).ReferralChasing = ReferralChasingOption.All;

尝试传递主体上下文对象的变量。新PrincipalContext(ContextType.Domain,“此处域名”)。我没有尝试过仅仅是一个建议。当我知道这个领域的时候,这是有效的。谢谢我仍然希望为用户提供更多类似于SharePoint中的用户字段的选项,但这将暂时起作用。是的,我在早些时候尝试这种方法时遇到了相同的错误,即返回了推荐。我会尝试这种方法,并让你知道。你是如何利用这种方法来回避转介问题的?在设置User.EmailAddress时,甚至在对用户对象进行任何设置之前将用户对象传递到PrincipalSearcher构造函数时,我都会收到该错误。是的,看起来我也收到了。看起来您最好直接使用
DirectorySearcher
PrincipalSearcher
只是它的一个包装器,“让事情变得更简单”,但在这种情况下,它只是让事情变得不可能。下面是我经常提到的一个方便的链接。在“获取对象区分名称:ADO.NET搜索(高级)”一节中,它演示了如何使用DirectorySearcher,不过您必须更改用于通过
邮件
属性进行搜索的过滤器。这里有一个使用
DirectorySearcher
搜索全局目录的简单得多的示例: