我对 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"
在当前代码中,在
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