首页 > 解决方案 > 将 CSV 值从一个 CSV 文件复制到另一个文件的匹配 CSV 值

问题描述

我有两个 CSV 文件,并且都有一个公共列,即 EmailAddress 标题。powershell 脚本应该将电话号码从一个 csv 复制到电子邮件地址匹配的另一个。

第一个 CSV 文件 users.csv 是一个 Get-ADUser csv 导出文件,具有以下标题:

"SamAccountName";"DisplayName";"Surname";"GivenName";"telephoneNumber";"EmailAddress"

第二个 CSV 文件是我们地址簿的导出文件,具有以下标题:

"RoomNr";"Name";"TelNr";"Cordless";"Fax";"Department";"Title";"EmailAddress"

我的目标是将“TelNr”复制到 users.csv,其中“EmailAddress”的值相等。

我的想法是这样的:

$users = Import-Csv -Path C:\users.csv -Delimiter ";"
$addressbook = Import-Csv -Path C:\addressbook.csv -Delimiter ";"


foreach ($record in $users) {
    $mail = $record.EmailAddress
    $match = $addressbook | Where-Object {$_.EmailAddress -like $mail}
    
    $record.telephoneNumber = $match.TelNr
}

但它根本不起作用。文件中没有写入任何内容。知道我哪里出错了吗?

标签: powershellcsv

解决方案


那么近..

所缺少的只是将更新的$users对象数组输出为 CSV 文件。

$users = Import-Csv -Path 'C:\users.csv' -Delimiter ";"
$addressbook = Import-Csv -Path 'C:\addressbook.csv' -Delimiter ";"

foreach ($record in $users) { 
    $mail = $record.EmailAddress
    $record.telephoneNumber = ($addressbook | Where-Object { $_.EmailAddress -eq $mail }).TelNr
}

# output to new csv file
$users | Export-Csv -Path 'C:\UsersComplete.csv' -Delimiter ';' -NoTypeInformation

推荐阅读