【问题标题】:Copy CSV values from one CSV file to matching CSV values of another file将 CSV 值从一个 CSV 文件复制到另一个文件的匹配 CSV 值
【发布时间】:2026-01-01 14:25:01
【问题描述】:

我有两个 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
}

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

【问题讨论】:

    标签: powershell csv


    【解决方案1】:

    如此接近..

    所缺少的只是将更新后的$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
    

    【讨论】: