我在两个数组中有许多对象。每个对象都具有相同的属性。
示例对象:
$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);
我的目标是基于两个因素以 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);
在此示例中,我可以匹配 George Banks 的 EmployeeID,因为它存在于两个数组中。但是,Paul Newman 没有在 $array2 中填充 EmployeeID,因此我需要根据他的 FirstName/LastName 组合来匹配他。
最终,我想得到一个这样的数组输出,它将每个对象的所有属性合并到一个对象中。
$obj1.FirstName = 'George'
$obj1.LastName = 'Banks'
$obj1.EmployeeID = '1903'
$obj2.FirstName = 'Paul';
$obj2.LastName = 'Newman';
$obj2.EmployeeID = '567'
$aOutput = @($obj1,$obj2);
我这样做的现实原因有两个。
我有一个包含 FirstName、LastName、EmployeeID、Department 的员工电子表格。在 Active Directory 中,通常只填充 FirstName 和 LastName。我想获取电子表格中的数据并使用丢失的数据填充该用户的 Active Directory 用户帐户。
我们有数以千计的 Active Directory 用户帐户,这些帐户并未专门分配给实际员工,目前也无法得知。我需要这个脚本来找到一种将实际员工与其各自的 Active Directory 用户帐户相匹配的方法,以便我们可以标记它。标记后,如果该用户帐户在 60 天内未通过身份验证,则该用户帐户将不会被删除。