【发布时间】:2022-01-04 07:19:49
【问题描述】:
我有两个带有制表符分隔值的 CSV 文件。
CSV1:
GivenName Surname DisplayName Manager
John Smith John Smith Oliver Twist
CSV2:
SAMAccountName mail DistinguishedName
John Smith johns@example.com CN=John Smith,CN=Users,DC=example,DC=com
Oliver Twist olivert@example.com CN=Oliver Twist,CN=Users,DC=example,DC=com
我想要做的是将 CSV1 与 CSV2 进行比较,并将 CSV1 文件中 Manager 列中的经理名称与 CSV2 DistinguishedName 列值(即"CN=Oliver Twist")相匹配,如本例所示并导出到像这样的新 CSV 文件:
SAMAccountName mail Manager
John Smith johns@example.com Oliver Twist
如前所述,CSV2 文件中可能有数百个可分辨名称,我想要的只是将DistinguishedName 列值"CN=whatever name " 与CSV1 中的Manager 列进行比较和匹配的输出。
这是我尝试过的脚本:
$csv1 = Import-Csv -Path 'C:temp\AD.csv'
$csv2 = Import-Csv -Path 'C:\temp\AD_ExportDN.csv'
$csv3 = foreach ($record in $csv2) {
$matchingRecord = $csv1 | Where-Object { $_.manager -eq $record.manager }
# if your goal is to ONLY export records with a matching email address,
# uncomment the if ($matchingRecord) condition
#if ($matchingRecord) {
$record | Select-Object *, @{Name = 'manager'; Expression = {$matchingRecord.DistinguishedName}}
#}
}
$csv3 | Export-Csv -NoTypeInformation -Force -Path 'C:\temp\merged_for_AD2.csv'
【问题讨论】:
-
您需要帮助的代码在哪里?发布您尝试过的内容并包含任何错误或相关详细信息。
-
这些是制表符分隔的值吗?还是固定宽度的列?否则,多列包含空格将使解析更加困难。另外,两个表中的
John Smith条目是如何相关的?CSV1.DisplayName == CSV2.SAMAccountName似乎是唯一的方法,在这种情况下,为什么不能通过SAMAccountName而不是DistinguishedName找到Manager?
标签: powershell csv match relationship matching