我有兩個數組內的一些對象。每個對象具有相同的屬性。在兩個包含Powershell中的對象的數組中找到匹配的最快方法是什麼?
實施例目的:
$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);
在這個例子中,我可以對他的僱員匹配喬治·班克斯,因爲它在兩個數組存在。但是,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);
現實世界的原因我這樣做是兩個原因。
我有一個名字,姓氏,僱員ID,部門僱員的電子表格。在Active Directory中,通常只填寫名字和姓氏。我想獲取電子表格中的數據並使用缺失的數據填充該用戶的Active Directory用戶帳戶。
我們有成千上萬的活動目錄用戶帳戶沒有明確分配給實際員工,目前無法知道。我需要這個腳本來找到一種方法來將實際員工與他們各自的Active Directory用戶帳戶進行匹配,以便我們可以對此進行標記。標記後,如果該用戶帳戶在60天內未通過身份驗證,則該用戶帳戶不易被刪除。
我認爲在示例中$ obj3的設置中存在複製粘貼錯誤。這一行:'$ obj2 | Add-Member -Type NoteProperty -Name EmployeeID'1903';'應該引用$ obj3而不是$ obj2。我會編輯它,但界面需要更改至少6個字符。 – David 2012-07-17 00:32:27
您可能想調整您的示例,因爲您所需的輸出與您的輸入相同,即obj1和obj2不會更改。雖然這是基於輸入的有效性,但沒有說明變化會是什麼樣子。 – David 2012-07-17 02:23:18