Я новичок в 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 вы выполняете итерацию по каждой группе объектов и присваиваете этим переменным значение имени группы и идентификатора пользователя, однако это значение переназначается с каждой итерацией цикла, оставляя вам только последний объект, поэтому в результатах вы всегда видите последнюю группу (группа 3). В этом случае ForEach-Object следует полностью удалить.
Тогда в следующем цикле @{Name = 'Group'; Expression = { $groups }} должно быть @{Name = 'Group'; Expression = 'Name' }, имя группы представлено свойством .Name. И идентификаторы пользователей, к которым вы хотите присоединиться, должны быть @{ 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
Вы можете использовать приведенный ниже сценарий для выполнения вашего требования.
$csv_file = Import-Csv 'C:\Test\Other_Managers.csv' |
Group-Object 'Group Name' | ForEach-Object {
$group = $_.Name
$users = $_.Group.'User ID' -join ','
[PSCustomObject]@{
'Group Name' = $group
'User ID' = $users
}
}
$csv_file | Export-Csv -Path 'C:\Test\Other_Managers_out.csv' -NoTypeInformation
Спасибо за код и понятное объяснение.