0

Active Directory にクエリを実行し、結果を DataTable として返す ac# メソッドを作成しています。このメソッドは、LDAP ターゲットと LDAP クエリを取得する必要があります。

例:

DataTable users = LDAPQuery("LDAP://mydomain.com", "(&(objectCategory=person)(objectClass=user))")
DataTable desktops = LDAPQuery("LDAP://mydomain.com", "(&(objectCategory=computer)(name=desktop*))")

私の試みは以下です。私はそれのほとんどを持っていると思いますが、以下のようにハードコードされた列ではなく、クエリから返されたプロパティに基づいて動的に DataTable を構築したいと考えています。誰でもこれを行う方法を教えてもらえますか? または、たとえばADODBを使用するなど、より良い方法がある場合は?

    protected DataTable LDAPQuery(string domain, string query)
    {
        DirectoryEntry entry = new DirectoryEntry(domain);
        DirectorySearcher ds = new DirectorySearcher(entry);
        ds.Filter = query;
        ds.SearchScope = SearchScope.Subtree;
        SearchResultCollection src = ds.FindAll();

        DataTable dt = new DataTable();
        dt.Columns.Add("samaccountname");
        dt.Columns.Add("givenName");
        dt.Columns.Add("sn");
        dt.Columns.Add("mail");

        foreach (SearchResult sr in src)
        {
            DataRow dr = dt.NewRow();
            DirectoryEntry de = sr.GetDirectoryEntry();
            dr["samaccountname"] = de.Properties["samaccountname"].Value.ToString();
            dr["givenName"] = de.Properties["givenName"].Value.ToString();
            dr["sn"] = de.Properties["sn"].Value.ToString();
            dr["mail"] = de.Properties["mail"].Value.ToString();
            dt.Rows.Add(dr);
            de.Close();
        }
        return dt;
    }

ありがとう

4

1 に答える 1