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",
这是一个新手问题,但经过几个小时的尝试,我仍然不知道,有什么比创建 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",