2012-02-09 54 views
2

我正在使用DirectorySearcher类来查询活动目录。它在单个页面中提供所有记录(超过5000个)。我想每页获得100条记录。所以我转到了SearchRequest类。使用SearchRequest类,每页可以获得100条记录。但对于特定的查询,它不起作用。我想让所有的用户使用他们的“samaccountname或显示名称以'a'开头”“正常工作。然后,我想让所有用户使用他们的“samaccountname和显示名称以'a'开头”,这是行不通的。我可以猜出原因,其中一些用户在没有任何显示名称的情况下启动他们的samaccountname。有关此问题的任何解决方法?请指引我System.DirectoryServices.Protocols.SearchRequest Ldap查询执行问题

请参考Active Directory中的下列代码

 //This query works fine 
     //string filter = "(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(|(samaccountname=a*)(displayname=a*)))"; 


     /* Not works */ 
     string filter = "(&(objectCategory=person)(objectClass=user)(!sAMAccountType=805306370)(&(samaccountname=a*)(displayname=a*)))"; 
     LdapConnection connection = new LdapConnection(serverName); 
     string[] attribs = { "samaccountname", "displayname" }; 

     // create a SearchRequest object 
     SearchRequest searchRequest = new SearchRequest 
               (scope, 
               filter, 
               System.DirectoryServices.Protocols.SearchScope.Subtree, 
               attribs); 

     SortRequestControl sortRequest = new SortRequestControl("samaccountname", false); 
     searchRequest.Controls.Add(sortRequest); 

     VlvRequestControl vlvRequest = 
      new VlvRequestControl(0, numEntries, offsetVal); 
     searchRequest.Controls.Add(vlvRequest); 

     SearchResponse searchResponse = 
      (SearchResponse)connection.SendRequest(searchRequest); 

     if (searchResponse.Controls.Length != 2 || 
      !(searchResponse.Controls[0] is SortResponseControl)) 
     { 
      Console.WriteLine("The server does not support VLV"); 
      return null; 
     } 
+0

什么是错误?据我所知,该过滤器是有效的。 – 2012-02-10 17:06:08

回答

0

你真的想显示名?也许全名或CN将是更准确的选择。

+0

不,我可能需要查询给定名称或sn。我知道,用户必须具有cn或fullname属性。问题是查询所需的属性。该属性可以是displayname,pwdlastset,lastlogon等。 – Tamil 2012-02-10 03:14:59