2012-05-16 16 views
0

我是C#的新手,並且希望使用C#從Active Directory中獲取數據並將其輸出到Excel文件中。我看了幾個教程,並且對如何做到這一點感到困惑。我正在尋找獲得用戶ID,部門和名稱。我如何使用.FindAll()功能來做到這一點?使用C#將AD信息拉入Excel中#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.DirectoryServices; 

namespace ADquery 
{ 
     class UserLookUp 
    { 
    static void Main(string[] args) 
    { 
     Console.WriteLine(retrieveUsers()); 
     Console.ReadLine(); 
    } 

    public static string retrieveUsers() 
    { 

     string path = ("LDAP://OU=IS,OU=People,DC=Corporate,DC=Amfam,DC=com"); 

     //Init instance of DirectoryEntry 
      DirectoryEntry dEntry = new DirectoryEntry(path); 
      DirectorySearcher dSearcher = new DirectorySearcher(dEntry); 

      //Establish filter (all users)? 
      dSearcher.Filter = "(&(objectCategory=person)(objectClass=user)(cn=*))"; 



      foreach (SearchResult searchResults in dSearcher.FindAll()) 
      { 
       if (searchResults.Properties["CN"][0].ToString() != null) 
       { 

        //pull info desired 
        ResultPropertyValueCollection valueCollection = 
        searchResults.Properties["manager"]; 

        foreach (Object propertyValue in valueCollection) 
        { 
         Console.WriteLine("Property Value: " + (string)propertyValue.ToString()); 
        } 

        Console.WriteLine(" "); 

        catch (InvalidOperationException iOe) 
        { 

          dSearcher.Dispose(); 
        } 

        catch (NotSupportedException nSe) 
        { 

        } 

        finally 
        { 
          if(sResults != null) 
           sResults.Dispose(); 
        } 

     /* 

     // Create new Excel file. 
      var excelFile = new ExcelFile(); 

     // Foreach DataTable, add new worksheet and insert data from DataTable into it. 
      foreach (DataTable dataTable in dataSet.Tables) 
       excelFile.Worksheets.Add(dataTable.TableName).InsertDataTable(dataTable, 0, 0, true); 

     // Save Excel file to XLS format. 
      excelFile.SaveXls(dataSet.DataSetName + ".xls"); * 

     */ 

       } 
      } 
    } 
} 
} 
+0

你對上面的代碼有什麼問題?什麼不工作,確切地說? –

回答

1

它必須是這樣的:

public void WriteEntries(DirectoryEntry domainRoot) 
    { 
     DirectorySearcher searcher = new DirectorySearcher(domainRoot); 
     searcher.PropertiesToLoad.Add("displayName"); 
     searcher.PropertiesToLoad.Add("cn"); 
     searcher.PropertiesToLoad.Add("department"); 
     searcher.Filter = "(&(objectCategory=person))"; 
     foreach (SearchResult result in searcher.FindAll()) 
     { 
      // Login Name 
      Console.WriteLine(GetProperty(result, "cn")); 
      // Display Name 
      Console.WriteLine(GetProperty(result, "displayName")); 
      // Department 
      Console.WriteLine(GetProperty(result, "department")); 
     } 
    } 

    private string GetProperty(SearchResult searchResult, string PropertyName) 
    { 
     if (searchResult.Properties.Contains(PropertyName)) 
     { 
      return searchResult.Properties[PropertyName][0].ToString(); 
     } 
     else 
     { 
      return string.Empty; 
     } 
    } 

使用WriteEntries與根條目來搜索我寫了他們在控制檯,你可以把它們放在一個Excel行。對於使用excel,我建議您使用exellibrary

+0

非常有幫助,謝謝Alisabzevari – LinksTune