2011-12-07 85 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)優於舊的搜索Active Directory的方式。 –

+0

我同意dj。直到切換到主體對象之前,我經歷了一段悲慘的經歷。 –

+0

Program.domain的價值是什麼? – Hans

回答

0

有兩個可能的原因:

0)訪問控制:您沒有適當的訪問級別,查看有問題(在過濾器匹配他們所需要的物品或者財產(不論是objectClassobjectCategory))。在問題

1)目標對象不實際匹配指定的過濾器。用戶可以是(&(objectClass=user)(objectCategory=person))以外的東西。

我的建議如下來解決這個問題:

0)以您期望相匹配,仔細檢查它一個樣本用戶。檢查以確保objectClass確實包含user和objectCategory設置爲person。如果沒有,請將您的查詢修改爲包含您嘗試查找的所有用戶。 (您可以參考AD架構來查看這些東西之間的關係)

1)確保您正在執行查詢的上下文有權訪問您要查找的所有對象,包括的屬性你正在使用你的過濾器。如果您無法訪問過濾器中的所有屬性,那麼AD將不會返回匹配的查詢......如果是這樣,它將是一種信息披露的形式。