C#/ADSI/OpenLDAPへの接続 のバックアップ(No.1) |
|
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("\"", ""); } } }