导出具有不同列数的数组

Export array with different number of columns

我正在尝试在 Powershell 中创建报告,但 运行 在尝试导出时遇到了问题。基本上我有一个将数据添加到数组的循环,但是当我导出时,所有数据都没有导出。我把它从循环中打破了,所以我可以告诉你发生了什么。

我期待什么:

+----------+-----------+--------+
| HostName | Platform  | 3rdCol |
+----------+-----------+--------+
|  Test1   | Platform1 |        |
|  Test2   | Platform2 | 3rdCol |
+----------+-----------+--------+

我得到的:

+----------+-----------+
| HostName | Platform  |
+----------+-----------+
|  Test1   | Platform1 |
|  Test2   | Platform2 |
+----------+-----------+

Powershell:

#Create report array
$report = @()

#New object for Test1
$stats = New-object PSCustomObject
#Hostname column for Test1
$stats | Add-Member -Name HostName -Value Test1 -Membertype NoteProperty
#Platform column for Test1
$stats | Add-Member -Name Platform -Value Platform1 -Membertype NoteProperty
#Add row to report
$report += $stats

#New object for Test2
$stats = New-object PSCustomObject
#Hostname column for Test2
$stats | Add-Member -Name HostName -Value Test2 -Membertype NoteProperty
#Platform column for Test2
$stats | Add-Member -Name Platform -Value Platform2 -Membertype NoteProperty
#3rd column for Test2
$stats | Add-Member -Name 3rdCol -Value 3rdCol -Membertype NoteProperty
#Add row to report
$report += $stats

#Export only has two columns instead of 3
$report | export-csv c:\temp\report.csv -notypeinformation

当 PS 输出一个数组时,它会查看第一条记录以确定需要哪些列,因此您需要确保您的第一条记录具有数组中任何成员的所有属性, 即使值为 $null.

如果您不知道这些属性是什么,您可以在事后以编程方式获得它,例如:

$Props=$report | ForEach{$_.PSObject.Properties} | Select -Expand Name -Unique
$Props|Where{$_ -notin $Report[0].psobject.properties.name}|ForEach{Add-Member -InputObject $Report[0] -NotePropertyName $_ -NotePropertyValue $null}