如何从C#中找到活动目录中的用户?

Sun*_*une 18 c# active-directory

我试图弄清楚如何从C#中搜索AD,类似于"查找用户,联系人和组"在"Active Directory用户和计算机"工具中的工作方式.我有一个字符串,其中包含一个组名或一个用户名(通常格式为firstname middleinitial [如果他们有一个]姓氏,但并非总是如此).即使我对群组与用户进行单独查询,我也无法想出一种能够捕获大多数用户帐户的搜索方式."查找用户","联系人"和"组"工具几乎每次都会将它们带回.有人有什么建议吗?

我已经知道如何使用DirectorySearcher类,问题是我找不到我想做的查询.cn和samaccount名称都没有与用户的名字有关,所以我无法搜索这些名称.拆分和搜索sn和givenName并没有像该工具那样接近任何地方.

mar*_*c_s 20

你是.NET 3.5吗?如果是这样 - AD在.NET 3.5中有很多新功能 - 请参阅本文由Ethan Wilanski和Joe Kaplan 管理.NET 3.5中目录安全主体.

其中一个重要的新功能是"PrincipalSearcher"类,它应该极大地简化在AD中查找用户和/或组的过程.

如果您不能使用.NET 3.5,那么可能会让您的生活更轻松的一件事就是称为"模糊名称解析",它是一个鲜为人知的特殊搜索过滤器,可以同时搜索任何与名称相关的属性.

像这样指定您的LDAP搜索查询:

searcher.Filter = string.Format("(&(objectCategory=person)(anr={0}))", yourSearchTerm)
Run Code Online (Sandbox Code Playgroud)

此外,我建议对"objectCategory"属性进行过滤,因为这是AD中的单值和默认索引,这比使用"objectClass"快得多.


Miy*_*der 10

System.DirectoryServices有两个名称空间... DirectoryEntry和DirectorySearcher.

有关DirectorySearcher的更多信息:

http://msdn.microsoft.com/en-us/library/system.directoryservices.directorysearcher.aspx

然后,您可以使用Filter属性按组,用户等进行筛选...

因此,如果您想按帐户名称进行过滤,则可以将.Filter设置为:

"(&(sAMAccountName=bsmith))"
Run Code Online (Sandbox Code Playgroud)

并运行FilterAll方法.这将返回一个SearchResultCollection,您可以循环并提取有关该用户的信息.