2013-05-20 33 views
4

我已經檢查了其他兩個線程,甚至使用了一個代碼,但它永遠不會填充列表。當我打開Active Directory用戶和計算機並轉到組織下的我的經理時,我會看到他的直接報告列表。獲取當前用戶的直接報告列表

我想要做的是通過代碼訪問該列表。目前爲止我找不到的東西似乎有效。

public void GetDirectoryEntry(string adUserName) 
    { 
     DirectoryEntry de = new DirectoryEntry("LDAP://server.server.com"); 

     DirectorySearcher ds = new DirectorySearcher(de); 
     ds.Filter = "(&((&(objectCategory=Person)(objectClass=User)))(samaccountname=" + adUserName + "))"; 
     ds.SearchScope = SearchScope.Subtree; 

     SearchResult rs = ds.FindOne(); 

     string distinguishedName = rs.Properties["distinguishedName"][0].ToString(); 
     string department = rs.Properties["department"][0].ToString(); 
     string manager = rs.Properties["manager"][0].ToString(); 
     //string temp3 = rs.Properties["Reports"][0].ToString(); 

    } 

我一直在使用ReportsdirectReports既不工作都錯誤了嘗試。

此方法加載登錄的用戶或我傳入的任何用戶。我可以訪問他們的所有財產,但我似乎無法訪問他們的直接報告。

我錯過了什麼?

找到了答案:

foreach (string objProperty in rs.Properties["DirectReports"]) 
      { 
       isManager = true; 
       string emp = objProperty.ToString(); 
       string[] setp = new string[1]; 
       setp[0] = "DC"; //If your users are in a OU use OU 

       emp = emp.Split(setp, StringSplitOptions.None)[0]; 
       emp = emp.Replace("CN=", ""); 
       emp = emp.TrimEnd(','); 
       emp = emp.Replace("\\, ", ", "); 
       emp = emp.Split(',')[0]; 
       //emps.Add(emp); 
      } 

回答

4
foreach (string objProperty in rs.Properties["DirectReports"]) 
      { 
       isManager = true; 
       string emp = objProperty.ToString(); 
       string[] setp = new string[1]; 
       setp[0] = "DC"; //If your users are in a OU use OU 

       emp = emp.Split(setp, StringSplitOptions.None)[0]; 
       emp = emp.Replace("CN=", ""); 
       emp = emp.TrimEnd(','); 
       emp = emp.Replace("\\, ", ", "); 
       emp = emp.Split(',')[0]; 
       //emps.Add(emp); 
      }