C# 喜欢在ActiveDirectory中搜索

C# 喜欢在ActiveDirectory中搜索,c#,active-directory,C#,Active Directory,我正在使用C#中的以下代码搜索LDAP,以轮询用户的active directory: DirectoryEntry entry = new DirectoryEntry(ldapPath, userName, password); DirectorySearcher Searcher = new DirectorySearcher(entry); Searcher.CacheResults = true; Searcher.SearchScope = SearchScope.Subtree

我正在使用C#中的以下代码搜索LDAP,以轮询用户的active directory:

DirectoryEntry entry = new DirectoryEntry(ldapPath, userName, password);

DirectorySearcher Searcher = new DirectorySearcher(entry);

Searcher.CacheResults = true;
Searcher.SearchScope = SearchScope.Subtree;

Searcher.Filter = "(&(&(objectCategory=person)(objectClass=user))
    (|(samaccountname=" + userSearch.SamAccountName + "*)
    (&(GivenName=" + userSearch.FirstName + "*)(SN=" + userSearch.Surname + 
        "*))))";

Searcher.PropertiesToLoad.AddRange(new string[] {"DisplayName", "GivenName",
    "DistinguishedName","Title","manager",
         "mail", "physicalDeliveryOfficeName", "DirectReports", "Company", 
         "Description", "SAMAccountName"});

SearchResultCollection results = Searcher.FindAll();

List<ActiveUser> activeUsers = new List<ActiveUser>();
DirectoryEntry=新的DirectoryEntry(ldapPath、用户名、密码);
DirectorySearcher search=新的DirectorySearcher(条目);
Searcher.CacheResults=true;
Searcher.SearchScope=SearchScope.Subtree;
Searcher.Filter=“(&(&(objectCategory=person)(objectClass=user))
(|(samaccountname=“+userSearch.samaccountname+”*)
(&(GivenName=“+userSearch.FirstName+”*)(SN=“+userSearch.姓氏+
"*))))";
Searcher.PropertiesToLoad.AddRange(新字符串[]{“DisplayName”,“GivenName”,
“识别名称”、“头衔”、“经理”,
“邮件”、“physicalDeliveryOfficeName”、“DirectReports”、“公司”,
“说明”、“SAMAccountName”});
SearchResultCollection results=Searcher.FindAll();
List activeUsers=new List();
我使用输入参数userSearch.FirstName=“jo”和userSearch.LastName=“bl”运行它,并期望有一个用户“Joe Bloggs”,但结果列表中没有显示这个。如果我在Windows中使用Active Directory用户和计算机工具中的名称文本框尝试此操作,Joe Bloggs将作为列表中的唯一用户出现。我使用的是正确的LDAP路径。我是否使用了错误的筛选器来复制windows工具中的功能?是否对显示名称进行“相似”搜索


任何帮助都将不胜感激。

如果您使用的是.NET 3.5或更高版本,您可以使用
PrincipalSearcher
和“示例查询”主体进行搜索:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a UserPrincipal 
// and with the first name (GivenName) of "Bruce"
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.GivenName = "Jo*";
qbeUser.Surname = "Bl*";

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
}

如果您还没有阅读过MSDN文章,这篇文章很好地展示了如何充分利用
System.DirectoryServices.AccountManagement

中的新功能。非常感谢,我会尝试一下,让您知道。甚至没有意识到这在3.5中已经改变了。仍然停留在过去:)@Sico:感觉就像一个传教士告诉每个人这件事:-)似乎很多人“错过”了这个新名称空间!这比使用DirectorySearcher要干净得多。谢谢