/// <summary> /// 設定引数を元にADモジュールオブジェクト生成 /// </summary> /// <returns>ADモジュールオブジェクト</returns> private static active_direcory_module get_ad_object() { Func <string, char, string[]> isolat_from_str = (string src_str, char delimiter) => { string pad_str = src_str.Replace(" ", ""); string[] dst_strs = src_str.Split(delimiter); return(dst_strs); }; // ADからグループ var ad_obj = new active_direcory_module(); string ad_server_name = json_module.get_external_resource("src_ad_server"); string ad_access_userid = json_module.get_external_resource("src_access_userid"); string ad_access_userpw = json_module.get_external_resource("src_access_passwd"); string ad_common_names = json_module.get_external_resource("src_common_names"); string ad_organizational_units = json_module.get_external_resource("src_organizational_units"); ad_obj.get_group_list(ad_server_name, isolat_from_str(ad_common_names, ','), isolat_from_str(ad_organizational_units, '\''), ad_access_userid, ad_access_userpw); return(ad_obj); }
/// <summary> /// シリアライズ元データ作成関数 /// </summary> /// <returns></returns> private static comparison_table create_comparison_data(DataTable group_list) { Func <string, string, string> transform_str_to_cug = (string src_str, string account_name_filter) => { string trim_str = src_str.Trim(); // 前後の空白を排除 if (trim_str.Equals("")) { return(""); } int all_appear_position = account_name_filter.LastIndexOf('*'); // フィルターでしてした*の出現位置取得 if (all_appear_position == -1) { return(""); } string group_header = account_name_filter.Substring(0, all_appear_position); return(group_header + trim_str); }; comparison_table compari_table = new comparison_table(); active_direcory_module ad_obj = get_ad_object(); // 移動う元ADからグループ情報を取得 mysql_module mysql = create_mysql_module(); Dictionary <string, group_info> group_infos = get_group_infos_from_destination_ad(); // 移動先ADから取得したグループ情報の取得 string ad_account_name_filter = json_module.get_external_resource("dst_account_name_filter"); string destination_domain = json_module.get_external_resource("destination_domain"); if (!destination_domain.Equals("")) { destination_domain += "\\"; } if ((group_infos == null) || (group_infos.Count == 0)) { loger_manager.write_log("ADからの取得グループ情報がありません", "warning"); return(null); } foreach (KeyValuePair <string, group_info> ad_group_membars in ad_obj.groups_list) // 移動元ADから取得したグループ情報を元にループ { // グループ情報の追加 string query_str = $"Name = '{ad_group_membars.Key}'"; DataRow[] result_rows = group_list.Select(query_str); if (result_rows.Length > 0) { foreach (var result_row in result_rows) { try { string group_name = transform_str_to_cug(result_row["CUGコード"].ToString(), ad_account_name_filter); comparsion_unit unit = new comparsion_unit(); unit.account_name = ad_group_membars.Value.account_name; unit.conversion_original = ad_group_membars.Value.sid; if (!group_infos.ContainsKey(group_name)) // CUGコードがリソースに設定されてなければ、移行対象外とする { unit.after_conversion = ""; unit.del_flg = 1; } else { unit.after_conversion = destination_domain + group_name; } if (!compari_table.comparsion_units.Contains(unit)) { compari_table.comparsion_units.Add(unit); } } catch (Exception e) { loger_manager.write_log(e.Message, "error"); } } } else { loger_manager.write_log($"該当するグループ名がありません グループ名: {ad_group_membars.Key}", "extracting", "extracting"); } if (ad_group_membars.Value.group_members.Count == 0) { continue; } // ユーザー毎に追加処理 foreach (user_info membar_user in ad_group_membars.Value.group_members) { try { var users = user_info.get_user_infos(mysql.connection_sql_str(), membar_user.account_name); if ((users == null) || (users.Count == 0)) { continue; } comparsion_unit unit = new comparsion_unit(membar_user, users[0], membar_user.sid, destination_domain + users[0].account_name); if (!compari_table.comparsion_units.Contains(unit)) { compari_table.comparsion_units.Add(unit); } } catch (Exception e) { loger_manager.write_log(e.Message, "error"); } } } compari_table.list_sort(); // 全て格納後、ソートを行う return(compari_table); }