什么时候我需要一个域名和一个域容器来创建一个PrincipalContext

本文关键字:一个 创建 PrincipalContext 什么时候 域名 | 更新日期: 2023-09-27 18:02:26

我正在开发一个c# . net Framework库来访问活动目录。

我要做的一件事是获得所有AD用户,我看到:

PrincipalContext principalContext =
    new PrincipalContext(ContextType.Domain,
                            domainName.Trim(),
                            domainContainer.Trim());

PrincipalContext principalContext = new PrincipalContext(ContextType.Domain);

返回相同的用户,代码如下:

// 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);
    }
}

何时需要使用域名和域容器?

什么时候我需要一个域名和一个域容器来创建一个PrincipalContext

使用

var context = new PrincipalContext(ContextType.Domain);

它将连接到当前上下文的域,通常是运行应用程序的用户登录到的域,或者如果当前上下文是未连接到域的本地用户,则会抛出异常。

在使用

var context = new PrincipalContext(ContextType.Domain, domainName, domainContainer);

domain属性允许您连接到当前上下文以外的域,前提是当前上下文具有权限或您提供了有效凭据。因此,例如,在林中有多个域或域信任的环境中,您可以指定另一个域来运行查询,而不是用户所属的域。

容器属性限制所有使用该DomainContext的查询到指定的容器

上下文用于以这种方式创建目录条目:

new DirectoryEntry("LDAP://domain_name/container")

或当没有容器时:

new DirectoryEntry("LDAP://domain_name/rootDse")

你可以省略域名,但我建议总是包括它,因为我过去有过问题(一些随机抛出的异常)。

当您希望将搜索限制到特定OU时,您应该包含容器。

相关文章: