Вы можете сделать следующее, если у вас есть настоящие CSV-файлы с заголовками столбцов.
$DataSet1 = Import-Csv C:\provisioningdata\Provision-P3-D
$DataSet2 = Import-Csv C:\provisioningdata\Provision-P3
Compare-Object $DataSet1 $DataSet2 -Property PrimarySmtpAddress |
Where SideIndicator -eq '=>' |
Select-Object @{n='Username';e={$_.PrimarySmtpAddress}}
Что касается параллельного обхода через два массива, использовать for
l oop проще всего. Однако вы действительно полагаетесь на то, что порядок ваших данных предсказуем.
for ($i = 0; $i -lt $DataSet2.Count; $i++) {
Compare-Object $DataSet1[$i] $DataSet2[$i] -Property PrimarySmtpAddress |
Where SideIndicator -eq '=>' |
Select-Object @{n='Username';e={$_.PrimarySmtpAddress}}
}
EDIT
Я не уверен, почему существует необходимость обхода по сайту, когда Compare-Object
поддерживает несколько свойств и выражений, но вы можете сделать следующее:
$File1 = Import-Csv -Path "C:\Data1-Large.csv"
$File2 = Import-Csv -Path "Data2.csv"
$SiteGroup1 = $File1 | Group-Object -Property {$_.SiteName -replace '(?<=^.{7}).*'}
$SiteGroup2 = $File2 | Group-Object -Property {$_.SiteName -replace '(?<=^.{7}).*'}
$Results = foreach ($site in $SiteGroup2) {
Compare-Object $SiteGroup1.Where{$_.Name -eq $site.Name}.Group $site.Group -Property PrimarySmtpAddress
}
Использование Compare-Object
с несколькими свойствами и выражениями:
Compare-Object $File1 $File2 -Property PrimarySMTPAddress,{$_.SiteName -replace '(?<=^.{7}).*'}