如何从Active Directory获取用户列表?有没有办法拉取用户名、名字、姓氏?我看到一个类似的帖子,上面用到了这个:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
我从来没有用过active directory,所以我完全迷路了.任何帮助都将不胜感激!
如何从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
中的DirectorySearcher或System.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之后使用.