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("\"", "");
}
}
}