You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PowerShell合并列头不同的两个CSV文件并按软件名匹配字段

PowerShell合并不同表头CSV实现方案

实现思路

  1. 先读取存储软件用户映射的csvf2,将软件名去除前后空格后作为键、用户SID作为值存入哈希表,大幅提升匹配效率
  2. 遍历存储软件基础信息的csvf1所有条目,以去除空格后的软件名去哈希表中匹配对应SID,匹配失败则填充null
  3. 仅保留需求指定的5个字段,最终导出为合并后的CSV文件

具体实现代码

# 1. 替换为你的实际文件路径
$csv1Path = "C:\你的路径\csvf1.csv"
$csv2Path = "C:\你的路径\csvf2.csv"
$outputPath = "C:\你的路径\合并结果.csv"

# 2. 构建软件-用户映射哈希表,自动处理csvf2软件名尾部空格问题
$userMapping = @{}
Import-Csv -Path $csv2Path -Encoding UTF8 | ForEach-Object {
    $softKey = $_.softwarename.Trim()
    $userMapping[$softKey] = $_.User
}

# 3. 遍历csvf1生成合并结果
$mergedResult = Import-Csv -Path $csv1Path -Encoding UTF8 | ForEach-Object {
    $currentSoft = $_.softwarename.Trim()
    $matchUser = $userMapping.ContainsKey($currentSoft) ? $userMapping[$currentSoft] : "null"
    # 输出指定字段的对象
    [PSCustomObject]@{
        softwarename = $_.softwarename
        InstalledDate = $_.InstalledDate
        hostname = $_.hostname
        softwarestatus = $_.softwarestatus
        user = $matchUser
    }
}

# 4. 导出结果CSV
$mergedResult | Export-Csv -Path $outputPath -Encoding UTF8 -NoTypeInformation

注意事项

  • 如果你的CSV文件采用GBK/ANSI编码,将代码中的-Encoding UTF8替换为-Encoding Default即可正常读取
  • 如果希望无匹配时user字段留空而非填充字符串null,将三元表达式中的"null"替换为$null
  • 结果完全保留csvf1的所有条目,csvf2中存在但csvf1中没有的软件不会被纳入最终结果,符合需求要求

内容的提问来源于stack exchange,提问作者Chandra Sekhar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:51:03