首页 > 解决方案 > 在 foreach 循环中将逗号分隔的值拆分为换行符 - PowerShell

问题描述

我有不同变量的数据,我正在使用PSObject. 由于我需要使用foreach循环,因此我在$repo.name列上获得了多个值,但其他两列$group_id&$group.name是单个值。

'

$all = foreach($group in $all_groups)
    {
        $group_id = $group.id
        $uri = "xxx/reports"
        $repo = (Invoke-RestMethod -Uri $uri –Headers $auth_header –Method GET).value
        New-Object -Typename PSObject -Property @{
        Group = $group_ID
        GroupName = $group.name
        DisplayName = ($repo.name -join ',')
       } | Select-Object Group,GroupName, DisplayName '

我得到了低于结果,但我的预期结果是不同的。

当前结果

Group GroupName DisplayName
----- --------- -----------
A     A0001     A1, A2, A3, A4
B     B0001     B1, B2, B3, B4

预期结果

Group GroupName DisplayName
----- --------- -----------
A     A0001     A1
A     A0001     A2
A     A0001     A3
A     A0001     A4
B     B0001     B1
B     B0001     B2
B     B0001     B3
B     B0001     B4

标签: powershellpowershell-2.0powershell-4.0

解决方案


如果不按摩$group.ID,则无需将其复制到另一个变量

根据mclayton的好提示,并使用更简单的[PSCustomObject]

$all = foreach($group in $all_groups) {
    $uri  = "xxx/reports"
    $repo = (Invoke-RestMethod -Uri $uri –Headers $auth_header –Method GET).value
    foreach($repoName in $repo.Name){
        [PCustomObject]@{
            Group       = $group.ID
            GroupName   = $group.Name
            DisplayName = $repoName
        }
    }
}
$all

推荐阅读