如何在 PowerShell 中加入不同行的单元格

问题描述 投票:0回答:1

我对 PowerShell 相当陌生,只是想用 PowerShell 来填补我的主要支持角色的一些空白,到目前为止它很棒,但我目前仍在尝试寻找以下解决方案。

这是输入数据的示例:

"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"
powershell csv join group
1个回答
0
投票

在当前代码中,在

Group-Object
之后,您将迭代每组对象并将组名称和用户 ID 的值分配给这些变量,但是该值会在每次循环迭代时重新分配,只剩下最后一个对象,这就是为什么在结果中您总是看到最后一组(组 3)。在这种情况下,应完全删除
ForEach-Object

然后在下一个循环中,

@{Name = 'Group'; Expression = { $groups }}
应该是
@{Name = 'Group'; Expression = 'Name' }
,组的名称由
.Name
属性表示。您要加入的用户 ID 应该是
@{ N = 'User Id'; E = { $_.Group.'User Id' -join ',' }}

如果您想简化流程,代码如下所示:

Import-Csv 'C:\Test\Other_Managers.csv' |
    Group-Object 'Group Name' |
    Select-Object @(
        @{ N = 'Group Name'; E = 'Name' }
        @{ N = 'User Id'; E = { $_.Group.'User Id' -join ',' }}) |
    Export-Csv -Path 'C:\Test\Other_Managers_out.csv' -NoTypeInformation
© www.soinside.com 2019 - 2024. All rights reserved.