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

如何在PowerShell中合并不同行的单元格数据

PowerShell合并CSV同组用户ID问题解决

输入数据

"Group Name","User ID"
"GROUP1","X9998988"
"GROUP1","X9982293"
"GROUP1","X9953089"
"GROUP1","X9952998"
"GROUP1","X9209289"
"GROUP1","X9205093"
"GROUP1","X9208889"
"GROUP1","X9292353"
"GROUP1","X9293330"
"GROUP1","X9229034"
"GROUP1","X9222338"
"GROUP2","X9205298"
"GROUP3","X9953800"
"GROUP3","X9933359"
"GROUP3","X9993288"

期望输出

"Group Name","User ID"
"GROUP1","X9998988,X9982293,X9953089,X9952998,X9209289,X9205093,X9208889,X9292353,X9293330"
"GROUP2","X9205298"
"GROUP3","X9953800,X9933359,X9993288"

现有代码及错误结果

现有代码

$csv_file = Import-Csv 'C:\Test\Other_Managers.csv' | 
    Group-Object 'Group Name' | ForEach-Object { 
        $groups = $_.Group.'Group Name'
        $users = $_.Group.'User ID'
    }

foreach ($row In $groups) {
    $output = $row | Select-Object @{Name = 'Group'; Expression = { $groups } },
    @{Name = 'Users'; Expression = { ($users -join ',') } }

    $output | Export-Csv -Path 'C:\Test\Other_Managers_out.csv' -NoTypeInformation
}

错误输出

"Group","Users"
"GROUP3 GROUP3 GROUP3","X9953800,X9933359,X9993288"

修正后的代码

Import-Csv 'C:\Test\Other_Managers.csv' |
    Group-Object 'Group Name' |
    ForEach-Object {
        [PSCustomObject]@{
            'Group Name' = $_.Name
            'User ID'    = $_.Group.'User ID' -join ','
        }
    } |
    Export-Csv -Path 'C:\Test\Other_Managers_out.csv' -NoTypeInformation

问题解析

  1. 原代码中ForEach-Object块内的$groups和$users会被最后一组数据覆盖,仅保留GROUP3的信息。
  2. 后续的foreach循环完全冗余,且Select-Object中直接引用$groups会把所有组名拼接成字符串,而非单个组名。
  3. 修正逻辑:
    • 分组后直接用$_.Name获取当前组的唯一名称,无需遍历重复的组名列表。
    • 将当前组下的所有User ID用-join ','合并为单个字符串。
    • 构造PSCustomObject保留原CSV的列名,最后一次性导出结果,避免循环导出导致的文件覆盖问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:38:13