如何根据匹配的用户ID合并多份CSV文件(PowerShell脚本遇问题)
解决CSV文件按用户ID合并的PowerShell方案
原代码的问题
- 多余定义
$outfile变量,未实际使用 - 使用
Compare-Object是用来对比两个集合的差异,而非按ID关联合并数据,无法实现你需要的主CSV生成需求
正确实现脚本
以下脚本会将pcinfo.csv和mail.csv按用户ID关联,保留所有PC记录,同时匹配对应的邮箱信息(无邮箱则显示为空):
# 导入两个CSV文件 $pcInfo = Import-Csv -Path "c:\pcinfo.csv" $mailInfo = Import-Csv -Path "c:\mail.csv" # 按ID合并数据,保留所有PC记录,匹配邮箱 $mergedData = foreach ($pc in $pcInfo) { # 查找当前PC对应的邮箱记录 $mail = $mailInfo | Where-Object { $_.ID -eq $pc.ID } # 输出合并后的对象,无邮箱则Mail字段为空 [PSCustomObject]@{ PCname = $pc.PCname ID = $pc.ID Mail = if ($mail) { $mail.Mail } else { "" } } } # 额外处理mail.csv中存在但pcinfo.csv中没有的ID(比如R9876) $extraMailIDs = $mailInfo | Where-Object { $_.ID -notin $pcInfo.ID } foreach ($mail in $extraMailIDs) { $mergedData += [PSCustomObject]@{ PCname = "" ID = $mail.ID Mail = $mail.Mail } } # 导出到主CSV文件 $mergedData | Export-Csv -Path "c:\complete.csv" -NoTypeInformation
脚本说明
- 先遍历所有PC记录,匹配对应ID的邮箱信息,确保R1234的两台PC都会被保留并关联邮箱
- 额外添加
mail.csv中存在但pcinfo.csv没有的ID记录(比如R9876),即使没有PC信息也会纳入主CSV - 无对应数据的字段会显示为空字符串,保证CSV格式规范
内容的提问来源于stack exchange,提问作者yisjin86
相关产品推荐
相关产品推荐

