2つの配列内にいくつかのオブジェクトがあります。各オブジェクトには同じプロパティがあります。
オブジェクトの例:
$obj1 = New-Object System.Object;
$obj1 | Add-Member -Type NoteProperty -Name FirstName 'George';
$obj1 | Add-Member -Type NoteProperty -Name LastName 'Banks';
$obj1 | Add-Member -Type NoteProperty -Name EmployeeID '1903';
配列:
$array1 = @($obj1,$obj2,$obj3);
$array2 = @($obj5,$obj3,$obj9);
私の目標は、2つの要素に基づいて、各配列の各オブジェクトを1:1の関係で一致させることです。EmployeeIDと一致するか、EmployeeIDが入力されていない場合は、FirstName、LastNameの組み合わせで一致します。
たとえば、次の条件があるとします。
$obj1 = New-Object System.Object;
$obj1 | Add-Member -Type NoteProperty -Name FirstName 'George';
$obj1 | Add-Member -Type NoteProperty -Name LastName 'Banks';
$obj1 | Add-Member -Type NoteProperty -Name EmployeeID '1903';
$obj2 = New-Object System.Object;
$obj2 | Add-Member -Type NoteProperty -Name FirstName 'Paul';
$obj2 | Add-Member -Type NoteProperty -Name LastName 'Newman';
$obj2 | Add-Member -Type NoteProperty -Name EmployeeID '567';
$obj3 = New-Object System.Object;
$obj3 | Add-Member -Type NoteProperty -Name FirstName 'George';
$obj3 | Add-Member -Type NoteProperty -Name LastName 'Banks';
$obj3 | Add-Member -Type NoteProperty -Name EmployeeID '1903';
$obj4 = New-Object System.Object;
$obj4 | Add-Member -Type NoteProperty -Name FirstName 'Paul';
$obj4 | Add-Member -Type NoteProperty -Name LastName 'Newman';
$obj4 | Add-Member -Type NoteProperty -Name EmployeeID '';
$array1 = @($obj1,$obj2);
$array2 = @($obj3,$obj4);
この例では、両方の配列に存在するため、彼のEmployeeIDでGeorgeBanksを照合できます。ただし、PaulNewmanの$array2にはEmployeeIDが入力されていないため、FirstName/LastNameの組み合わせに基づいて彼を照合する必要があります。
最終的には、各オブジェクトのすべてのプロパティを1つのオブジェクトにマージするこのような配列出力を取得したいと思います。
$obj1.FirstName = 'George'
$obj1.LastName = 'Banks'
$obj1.EmployeeID = '1903'
$obj2.FirstName = 'Paul';
$obj2.LastName = 'Newman';
$obj2.EmployeeID = '567'
$aOutput = @($obj1,$obj2);
私がこれをしている現実世界の理由は2つの理由です。
FirstName、LastName、EmployeeID、Departmentの従業員のスプレッドシートがあります。Active Directoryでは、通常、FirstNameとLastNameのみが入力されます。スプレッドシートのデータを取得し、そのユーザーのActiveDirectoryユーザーアカウントに不足しているデータを入力したいと思います。
何千ものActiveDirectoryユーザーアカウントがありますが、これらは実際の従業員に特に割り当てられておらず、現在は知る方法がありません。このスクリプトは、実際の従業員をそれぞれのActive Directoryユーザーアカウントと照合して、マークを付ける方法を見つけるために必要です。マークが付けられると、そのユーザーアカウントが60日以内に認証されていない場合、そのユーザーアカウントは削除されません。