Powershell:从 3 个不同长度的数组创建多个 PSCustomObjects

Powershell: Create multiple PSCustomObjects from 3 arrays with different length

这是一个新手问题,但经过几个小时的尝试,我仍然不知道,有什么比创建 3 个不同的 forloop 或一个 if-decisions:

更好

示例代码:

$a = 1,2,3
$b = 5,6,7,8,9
$c = 4, 10

$test = [PSCustomObject]@{
    A = $a
    B = $b
    C = $c
}

$test

我得到输出:

A         B               C      
-         -               -      
{1, 2, 3} {5, 6, 7, 8...} {4, 10}

我试着用这个简单的例子,最好导出一个 csv-file 和一个 header 的每一列(如上)但值不在一行中,如 here.So我在实际问题中得到了所有 1000 多个值的 headered table。每列一个额外的文件似乎也不是最好的解决方案..

我正在寻找一个版本来获得类似(但对于所有数据)的输出:

A,B,C
1,5,4
2,6,10
3,7,
,8,
...

当我遍历输入并为每一行创建一个 PSCustomObject 时,我可以得到这个,但是当我想到不同的长度时,我想到了 3 个循环。用一些 extra-code 来避免 Index-Errors 的一个循环。 总有一些事情告诉我,这是一个简单的任务,但我找不到一个优雅的解决方案。

我很欣赏每一个想法!

谢谢

这是使用 while loop and Measure-Object 获取 3 arrays 上元素的最大数量的一种方法:

$a = 1,2,3
$b = 5,6,7,8,9
$c = 4,10

$max = $a.Count, $b.Count, $c.Count | Measure-Object -Maximum
$i = 0

$result = while($max.Maximum--)
{
    [pscustomobject]@{
        A = $a[$i]
        B = $b[$i]
        C = $c[$i]
    }
    $i++
}

现在查看您的预期输出,似乎您想将数据导出到 CSV,在这种情况下您将使用 Export-Csv, if you just want to have the data converted but without exporting it you can use ConvertTo-Csv:

PS /> $result | ConvertTo-Csv -NoTypeInformation

"A","B","C"
"1","5","4"
"2","6","10"
"3","7",
,"8",
,"9",