C# 我什么时候需要域名和域容器来创建PrincipalContext?
我正在开发一个C#.NET框架库来访问active directory 我要做的一件事就是吸引所有的广告用户,我发现:C# 我什么时候需要域名和域容器来创建PrincipalContext?,c#,.net,.net-4.0,active-directory,adsi,C#,.net,.net 4.0,Active Directory,Adsi,我正在开发一个C#.NET框架库来访问active directory 我要做的一件事就是吸引所有的广告用户,我发现: PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, domainName.Trim(), domainContainer.Trim()); 及 返回具有以下
PrincipalContext principalContext =
new PrincipalContext(ContextType.Domain,
domainName.Trim(),
domainContainer.Trim());
及
返回具有以下代码的相同用户:
// define a "query-by-example" principal - here, we search for all users
UserPrincipal qbeUser = new UserPrincipal(principalContext);
// create your principal searcher passing in the QBE principal
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);
// find all matches
foreach (var found in srch.FindAll())
{
UserPrincipal user = found as UserPrincipal;
if (user != null)
{
Console.WriteLine(user.SamAccountName);
}
}
何时需要使用域名和域容器?上下文用于以这种方式创建目录条目:
new DirectoryEntry("LDAP://domain_name/container")
或当没有容器时:
new DirectoryEntry("LDAP://domain_name/rootDse")
你可以省略域名,但我建议你一定要包含它,因为我在过去遇到过问题(一些随机抛出的异常)
如果要将搜索限制为特定OU,则应包含容器 使用时
var context = new PrincipalContext(ContextType.Domain);
它将连接到当前上下文的域,通常是运行应用程序的用户登录的域,或者如果当前上下文是未连接到域的本地用户,则将引发异常
使用时
var context = new PrincipalContext(ContextType.Domain, domainName, domainContainer);
域属性允许您连接到当前上下文以外的域,前提是当前上下文具有权限或您提供了有效凭据。因此,例如,在一个林中存在多个域或域信任的环境中,您可以指定另一个域来运行查询,而不是用户所属的域
容器属性将使用该
DomainContext
的所有查询限制为指定的容器。为了澄清,这是否意味着(示例1)用户必须在连接到域的计算机上?如果我使用的是受信任域,FindByIdentity无法在跨域上找到用户。你知道怎么避开吗?
var context = new PrincipalContext(ContextType.Domain, domainName, domainContainer);