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;
}
무엇이 오류입니까? 필터는 내가 말할 수있는 한 유효합니다. –