2012-02-09 4 views
2

DirectorySearcherクラスを使用してアクティブディレクトリを照会しています。 1ページ(5000以上)のすべてのレコードを提供します。私は1ページあたり100レコードを取得したい。そこでSearchRequestクラスに移動しました。 SearchRequestクラスを使用すると、1ページあたり100レコードを取得できます。しかし、特定のクエリのためには動作していません。私は "samaccountname"または "a"で始まる表示名を持つすべてのユーザーをうまく動作させたい。それから、私はすべてのユーザーに "samaccountname"を付け、表示名は 'a'で始まります。これは動作しません。私はその理由を推測することができますが、ユーザーの中にはsamaccountnameをdisplaynameを持たないものから始めます。この問題の回避策はありますか?私System.DirectoryServices.Protocols.SearchRequest Ldapクエリ実行の問題

を案内してくださいあなたが本当にActive Directory内のdisplayNameをしたいですか次のコード

 //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

を参照してください?おそらくfullNameまたはCNがより正確な選択肢になります。

+0

いいえ、givennameまたはsnを照会する必要があります。私は知っている、ユーザーはcnまたはfullname属性を持っている必要があります。問題は、必要な属性で照会することです。属性は、displayname、pwdlastset、lastlogonなどです。 – Tamil