2012-02-09 2 views
2

DirectorySearcher 클래스를 사용하여 활성 디렉터리를 쿼리하고 있습니다. 단일 페이지 (5000 개 이상)의 모든 레코드를 제공합니다. 페이지 당 100 개의 레코드를 얻고 싶습니다. 그래서 SearchRequest 클래스로 이동했습니다. SearchRequest 클래스를 사용하면 페이지 당 100 개의 레코드를 얻을 수 있습니다. 그러나 특정 쿼리의 경우 작동하지 않습니다. "samaccountname 또는 displayname이 'a'로 시작하는 모든 사용자를 정상적으로 작동시키고 싶습니다. 그런 다음 모든 사용자에게 "samaccountname"을 표시하고 displayname이 'a' "로 시작하도록하고 싶습니다. 이것이 작동하지 않습니다. 그 이유를 추측 할 수 있습니다. 일부 사용자는 displayname이없는 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

무엇이 오류입니까? 필터는 내가 말할 수있는 한 유효합니다. –

답변

0

당신이 정말 나 displayName을 원하십니까 다음 코드를 참조하십시오 안내하세요? 아마도 fullName 또는 CN이 더 정확한 선택 일 수 있습니다.

+0

아니요, givenname 또는 sn을 쿼리해야 할 수도 있습니다. 나는 사용자가 cn 또는 fullname 특성을 가지고 있어야 함을 알고 있습니다. 문제는 필요한 속성을 사용하여 쿼리하는 것입니다. 속성은 displayname, pwdlastset, lastlogon 등일 수 있습니다. – Tamil