导出具有不同列数的数组
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}
我正在尝试在 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}