2011-12-07 10 views
0

LDAPから一部のユーザーを表示できません。どうしてか分かりません。ここにコードがありますLDAPクエリで特定のユーザーが表示されない

 try 
     { 

      string path = "LDAP://" + Program.domain; 

      DirectoryEntry dEntry = new DirectoryEntry(path); 


      DirectorySearcher dSearcher = new DirectorySearcher(dEntry); 

      dSearcher.Filter = "(&(objectClass=user)(objectCategory=person))"; 

      //perform search on active directory 
      sResults = dSearcher.FindAll(); 


      //loop through results of search 
      foreach (SearchResult searchResult in sResults) 
      { 
       //string view = searchResult.Properties["samaccountname"][0].ToString(); 
       // Console.WriteLine(searchResult.Properties["userprincipalname"][0].ToString()); 

       if (searchResult.Properties["samaccountname"][0].ToString() == Program.username) 
       { 
        Console.WriteLine("**********UserDetails******************"); 
         foreach (Object propertyName in searchResult.Properties.PropertyNames) 
         { 
          ResultPropertyValueCollection valueCollection = 
           searchResult.Properties[(string)propertyName]; 


          foreach (Object propertyvalue in valueCollection) 
          { 
           Console.WriteLine((string)propertyName + " : " + propertyvalue); 

           result = true; 

          } 


         } 
         Console.WriteLine("************************************"); 

        } 

       } 

これはほとんど表示されませんが、ADに存在する他のユーザーはほとんど表示されません。 ドメイン管理者とドメインユーザーです。私はまだ許可の問題を見ていない... 私は真剣にいくつかのhelp.Can誰かが私を助けてくれる必要がありますか?

おかげ

+0

これはあなたの質問に答えるつもりではありませんが、.NET 3.5以降を実行している場合は、[System.DirectoryServices.AccountManagement API](http://msdn.microsoft.com/en- us/library/bb299745.aspx)を使用してください。 –

+0

私はそのことについてDJに同意します。プリンシパルオブジェクトに切り替えるまで私は悲惨な経験をしていました。 –

+0

Program.domainの値は何ですか? – Hans

答えて

0

2つの考えられる原因があります。

0)アクセス制御:あなたは、問題のオブジェクト(またはフィルタでそれらを一致させるために必要なプロパティを表示するために適切なレベルのアクセスを持っていません(objectClassまたはobjectCategory))。

1)問題のターゲットオブジェクトは、実際に指定されたフィルタと一致しません。ユーザーは(&(objectClass=user)(objectCategory=person))以外でもかまいません。

0)あなたが一致し、慎重にそれを点検することを期待つのサンプルユーザーを取る:

私の提案は、次のような問題にアプローチすることです。 objectClassには実際にuserが含まれ、objectCategoryにはpersonが設定されていることを確認してください。そうでない場合は、検索しようとしているすべてのユーザーを含めるようにクエリを変更します。

1)検索対象のコンテキストがを含むすべてのオブジェクトにアクセスできることを確認してください。フィルタで使用しています。フィルタ内のすべての属性にアクセスできない場合は、クエリに一致するものが返されません。その場合は、情報開示の一種になります。

関連する問題