我有一个PSCustomObject,其中包含嵌套的对象数组,我需要能够将其通过管道传递到Export-Csv
或Export-Excel
而不会丢失任何数据。我事先不知道对象将具有哪些属性,或者本身将具有哪些属性。
$ArrayofComplexObjects
是我的输入数据,来自日志摘要。字段的实际数量及其类型随我运行的每个数据提取而变化,具体取决于提取期间的精确日志条目。例如,最后一个摘录具有大约80个属性,其中60个是对象,并且取决于特定日志条目中的数据,其中任何一个本身都可以是对象数组。其余属性是字符串和整数的混合物。
$ArrayOfStrings = @()
$ArrayofComplexObjects | ForEach-Object {
$LineItem = @{}
$_.PSObject.Properties | ForEach-Object {
$LineItem.Add($_.Name, ($_.Value | Out-String ))
}
$ArrayOfStrings += New-Object PSObject -Property $LineItem
}
$ArrayOfStrings | Export-Csv .\temp.csv -NoTypeInformation
重要的是,以非技术友好的格式导出文件,并可以将其附加到事件日志中。
该代码正在运行,但是我感到非常怀念,因为我错过了一些显而易见的事情,并且重新发明了轮子。有没有更好/更简单/更优雅的方法呢?