1

今月に誕生日を迎えるADのすべてのユーザーを見つけようとしています。私はこれを動的にしたいのですが、とにかく。LDAPのクエリを初めて使用し、検索をフィルタリングする文字列を作成するのに問題があります。現在、すべてのユーザーを取得し、LINQを使用して返されたユーザーのリストを並べ替えていますが、AD検索からユーザーを返すだけでよいと思いました。今私は持っています:

System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry(_path, username, pwd);

System.DirectoryServices.DirectorySearcher mySearcher = new System.DirectoryServices.DirectorySearcher(entry);

mySearcher.Filter = ("(objectClass=user)");

ADを実行している人は、B-dayがMMDD、つまり0508の形式の文字列として単純に保存されていると思います。それについては何もできません(より良い方法があれば、私にできることは何もありません)。

では、これに取り組むための最良の方法は何ですか?

必要に応じて追加のコード:

     SortOption option = new SortOption("sAMAccountName", System.DirectoryServices.SortDirection.Ascending);

        mySearcher.Sort = option;

        DataSet ds = new DataSet();

        DataTable dtUsers = new DataTable("Users");

        dtUsers.Columns.Add("userid");

        dtUsers.Columns.Add("name");

        dtUsers.Columns.Add("birthday");

        dtUsers.Columns.Add("anniversary");

        dtUsers.Constraints.Add("UniqueUserId", dtUsers.Columns["userid"], true);



        foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())

        {

        System.DirectoryServices.DirectoryEntry de1 = resEnt.GetDirectoryEntry();

        DataRow drUser = dtUsers.NewRow();

        if (de1.Properties["sAMAccountName"].Value != null && de1.Properties["name"].Value != null && de1.Properties["employeeBirthDate"].Value != null && de1.Properties["employeeHireDate"].Value != null)

        {



        drUser["userid"] = de1.Properties["sAMAccountName"].Value.ToString();

        drUser["name"] = de1.Properties["name"].Value.ToString();
        drUser["birthday"] = de1.Properties["employeeBirthDate"].Value.ToString();
        drUser["anniversary"] = de1.Properties["employeeHireDate"].Value.ToString();



        dtUsers.Rows.Add(drUser);

        }

    }

    ds.Tables.Add(dtUsers);
4

2 に答える 2

1

LDAP クライアントは、substring検索フィルタを使用して、検索要求に返されるエントリを制限できます。たとえば、フィルタは、属性があり、値が で始まる属性を(&(objectClass=user)(birthday=05*))持つすべてのエントリを返します。この方法を使用する場合は、ディレクトリ管理者に事前に通知して、誕生日属性が適切に索引付けされるようにする必要があります。objectClassuserbirthday05

こちらもご覧ください

于 2012-05-08T20:14:30.147 に答える
0
int now = DateTime.Now.Month;
                string month;
                if (now < 10)
                {
                    month = "0" + now.ToString();
                }
                else
                {
                    month = now.ToString();
                }

mySearcher.Filter = ("(&(objectClass=user)(|(employeeHireDate=" + month + "*)(employeeBirthDate=" + month + "*)))");
于 2012-05-08T20:13:26.447 に答える