0

私はC#を初めて使用し、C#を使用してActive Directoryからデータをプルし、Excelファイルに出力することを検討しています。私はいくつかのチュートリアルを見てきましたが、これを行う方法に混乱しています。userID、Department、Nameを取得したいと思っています。.FindAll()機能を使用してこれを行うにはどうすればよいですか?

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"); *

       */

                }
            }
    }
}
}
4

1 に答える 1

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を使用することをお勧めします。

于 2012-05-16T19:56:44.553 に答える