OpenLDAPへの接続で、ややハマリかけたのでメモを残しておきます。

OpenLDAP ServerからCSV形式で抽出

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

namespace LDAPtoCSV
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                Console.WriteLine("Usage: LDAPtoCSV.exe <社員番号> <パスワード>");
                return;
            }

            string strPath = "LDAP://hostname/ou=Users,dc=adniss,dc=jp";
            string strUser = "uid=" + args[0] + ",ou=Users,dc=adniss,dc=jp";
            string strPass = args[1];
            DirectoryEntry drEntry = new DirectoryEntry(strPath, strUser, strPass, AuthenticationTypes.FastBind);

            try
            {
                // ADSI オブジェクトを取得する
                Object obj = drEntry.NativeObject;
                // LDAP検索オブジェクトを作成
                DirectorySearcher drSearch = new DirectorySearcher(drEntry);

                //drSearch.SearchRoot = new DirectoryEntry("ou=Users,dc=adniss,dc=jp");
                // アカウントフィルターを設定
                drSearch.Filter = "(uid=*)";

                // Common Name(cn)プロパティを同時に
                // 取得するように設定
                string[] outputs = { "givenName", "sn", "cn", "mail", "o", "businessCategory", "ou", "uid" };
                drSearch.PropertiesToLoad.AddRange(outputs);
                // 検索する
                SearchResultCollection scn = drSearch.FindAll();
                if (scn == null)
                {
                    Console.WriteLine("対象ユーザーがいません。");
                    return;
                }

                string line = "名,姓,ミドル ネーム,表示名,ニックネーム,電子メール アドレス,自宅の番地,自宅の市区町村,自宅の郵便番号,自宅の都道府県,国,自宅電話番号 :,自宅ファックス,携帯電話,個人 Web ページ,勤務先の番地,勤務先の市区町村,勤務先の郵便番号,勤務先の都道府県,勤務先の国,ビジネス Web ページ,勤務先電話番号,勤務先ファックス,ポケットベル,会社名,役職,部署名,オフィスの場所,メモ,,,,,,,,,,,,";
                Console.WriteLine(line);

                foreach (SearchResult sResult in scn)
                {
                    line = "\"" + esc(sResult.Properties["givenName"][0]) + "\",\"" + esc(sResult.Properties["sn"][0]) + "\",\"\",\"\",\"" + esc(sResult.Properties["cn"][0]) + "\",\"" + esc(sResult.Properties["mail"][0]) + "\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"" + esc(sResult.Properties["o"][0]) + "\",\"" + esc(sResult.Properties["businessCategory"][0]) + "\",\"" + esc(sResult.Properties["ou"][0]) + "\",\"\",\"" + esc(sResult.Properties["uid"][0]) + "\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"";
                    Console.WriteLine(line);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        static string esc(object str)
        {
            return (str as string).Replace("\"", "");
        }
    }
}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS