Я объясню, как я это сделаю, но я делаю это так, потому что мне удобнее работать с объектами, чем с хаст-таблицами.Кто-то может предложить ответ, используя хеш-таблицы, которые, вероятно, будут работать лучше.
Сначала я бы определил массив для хранения ваших данных, который позже можно будет экспортировать в CSV:
$report = @()
ЗатемЯ бы импортировал ваш CSV в объект, который может быть повторен:
$firstSet = Import-CSV .\File1.csv
Затем я бы повторил это, импортируя каждую строку в объект, который имеет два свойства, которые я хочу.В вашем случае это Employee и Department (потенциально больше, которые вы можете легко добавить).
foreach($row in $firstSet)
{
$employeeName = $row.Employee
$employee = [PSCustomObject]@{
Employee = $employee
Department = ""
}
$report += $employee
}
И, как вы можете видеть в приведенном выше примере, добавьте этот объект в ваш отчет.
Затем импортируйте второй CSV-файл во второй объект, чтобы выполнить его итерацию (для хорошей формы я фактически сделал бы это в начале скрипта, когда вы импортируете свой первый):
$secondSet = Import-CSV .\File2.csv
Теперь здесьгде это становится интересным.Исходя из предоставленной вами информации, я предполагаю, что все сотрудники в одном файле расположены в том же порядке, что и отделы в других файлах.Так, например, если я работаю в «Департаменте дегустации тортов», и мое имя указано в строке 12 файла 1, в строке 12 файла 2 указано «Департамент дегустации тортов».
В этом случае это довольно просто.,Вы просто прокрутите оба списка и обновите отчет:
$i = 0
foreach($row in $secondSet)
{
$dept = $row.Department
$report[i].Department = $dept
$i++
}
После этого ваш объект $report
будет содержать всех ваших сотрудников в одной строке и отделов в другой.Затем вы можете экспортировать его в CSV:
$report | Export-CSV .\Result.csv -NoTypeInformation
Это работает, если, как я уже сказал, ваши данные выровнены по обоим файлам.Если нет, то вам нужно немного подумать:
foreach($row in $secondSet)
{
$emp = $row.Employee
$dept = $row.Department
$report | Where {$_.Employee -eq $emp} foreach {$_.Department = $dept
}
Технически, в любом случае, вы можете просто сделать это таким образом, но это зависит от многих вещей.Прежде всего, если у вас есть данные для сопоставления в этом столбце по обоим файлам (что, очевидно, в моем примере вы не делаете, в противном случае вам не нужно было бы делать это в первую очередь, но вы можете сопоставить по другим полям, которые могуткак EmployeeID или DoB).Во-вторых, в отношении суверенитета отдельных записей (например, если у вас есть несколько совпадающих записей в вашем первом файле, у вас возникнет проблема; вы ожидаете дублирования во втором, поскольку в каждом отделе более одного человека).
В любом случае, надеюсь, это поможет.Как я уже сказал, вероятно, есть «лучший» способ сделать это, но я бы так и сделал.