Powershell Export-CSV忽略对象的非共享属性,我该如何解决这个问题?

时间:2018-06-08 01:12:49

标签: powershell powershell-v2.0

我在powershell 2中使用Export-CSV正确保存但是我希望它包含所有内容,如果它是空的我想要空值。

$list | Export-Csv -Path (Get-SaveFile) -NoTypeInformation;

Export-CSV的文档:

  

当您向Export-CSV提交多个对象时,Export-CSV会根据您提交的第一个对象的属性来组织文件。如果其余对象没有指定的属性之一,则该对象的属性值为null,由两个连续逗号表示。如果其余对象具有其他属性,则这些属性值不包含在文件中。

我不能简单地组织列表,因为有两件事可能有0或更多值。对于某些对象有注释,有些有链接,有些有两者。但是我需要每个链接1列,每个注释需要1列,无论有多少,或者没有。

是否有不同的cmdlet实现了这种export-csv样式,其中没有字段被忽略?

使用回答编辑: 来自iRon的这个PowerShell Snippet正是我需要覆盖Export-CSV的属性截断。 https://powersnippets.com/union-object/ 谢谢你的帮助!

1 个答案:

答案 0 :(得分:7)

如果您知道CSV文件中需要的特定属性,则可以将Select-Object cmdlet插入管道中,如下所示:

$list | Select-Object prop1, prop2, prop3 | Export-Csv -Path (Get-SaveFile) -NoTypeInfo

如果您知道特定属性,则可以扫描列表以生成属性列表。每个对象都公开一个名为PSObject的属性,该属性包含另一个名为Properties的属性。您可以扫描列表,获取列表中每个对象的属性名称,然后通过调用Select-Object -Unique来完成它,以获得一个没有重复项的很好的属性名称列表。

$propList = $list | ForEach-Object {
        $_.PSObject.Properties | Select-Object -ExpandProperty Name
    } | Select-Object -Unique

$list | Select-Object $propList | Export-Csv -Path (Get-SaveFile) -NoTypeInformation