如何从Active Directory获取用户列表?有没有办法拉取用户名、名字、姓氏?我看到一个类似的帖子,上面用到了这个:

 PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");

我从来没有用过active directory,所以我完全迷路了.任何帮助都将不胜感激!

推荐答案

如果您是Active Directory新手,我建议您首先了解Active Directory如何存储数据.

Active Directory实际上是一个LDAP服务器.LDAP服务器中存储的对象是分层存储的.它非常类似于将文件存储在文件系统中.这就是为什么它被命名为Directory服务器和活动Directory

Active Directory上的容器和对象可以由distinguished name指定.区别名是这样的CN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com.与传统关系数据库一样,您可以对LDAP服务器运行查询.这称为LDAP查询.

在中运行LDAP查询有多种方法.网你可以使用System.DirectoryServices中的DirectorySearcherSystem.DirectoryServices.Protocol中的SearchRequest.

对于您的问题,由于您要求具体查找用户主体对象,我认为最直观的方法是使用System.DirectoryServices.AccountManagement中的PrincipalSearcher.你可以很容易地从谷歌找到很多不同的例子.这是一个完全符合您要求的样品.

using (var context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
    using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
    {
        foreach (var result in searcher.FindAll())
        {
            DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
            Console.WriteLine("First Name: " + de.Properties["givenName"].Value);
            Console.WriteLine("Last Name : " + de.Properties["sn"].Value);
            Console.WriteLine("SAM account name   : " + de.Properties["samAccountName"].Value);
            Console.WriteLine("User principal name: " + de.Properties["userPrincipalName"].Value);
            Console.WriteLine();
        }
    }
}
Console.ReadLine();

请注意,在AD用户对象上,有许多属性.特别是,givenName会给你First Name分,sn会给你Last Name分.关于用户名.我想你指的是用户登录名.请注意,AD用户对象上有两个登录名.一个是samAccountName,也称为Windows 2000之前的用户登录名.userPrincipalName通常在Windows 2000之后使用.

Asp.net相关问答推荐

'dotnet --version is returning您必须安装或更新.NET才能运行此应用程序.三十九岁;

如何在编译时为我的 ASP.NET 项目中的每个控制器生成一个单独的 OpenAPI Swagger.json 文件?

如何以编程方式设置单元格 colored颜色 epplus?

如何在 ASP.​NET Core 中使用 jquery

IE10 SCRIPT5009:__doPostBack未定义

IIS Request.UserHostAddress 返回 IPV6 (::1),即使禁用了 IPV6

静态字段与会话变量

无法访问,内部,资源文件?

IIS 6/ASP.NET Windows 身份验证 list ?

我可以在 Visual Studio 2010 中将任务列表项添加到 csHTML 吗?

Jquery asp.net 按钮单击事件通过 ajax

如何将 css 类添加到 ASP.Net 中的更新面板?

确定哪个 w3wp.exe 进程属于 Windows 7 / IIS7.5 中的哪个 App Pool?

如何在asp.net中获取应用程序路径?

GMT 和 UTC 一样吗?

在资源文件中使用 HTML

将字典绑定到中继器

如何将我的 DDD 模型中的用户与身份验证用户集成?

ASP.NET 中的嵌套中继器

禁用文本框的模型绑定