如何将混合类型对象导出到csv文件?

搜狗

我正在编写一个脚本,该脚本返回一个对象列表,其中大多数对象具有不同数量的属性。当我在控制台中打印它时一切正常,但是当我尝试导出到 CSV 时,只有那些在所有对象中通用的字段才会被导出。所有其他的都被裁剪了。

我使用Add-Membercmdlet 添加更多属性,但并非所有对象都获得相同数量的属性。

例如,我尝试导出 2 个对象,其中一个对象是这样的:

FirstObject:{
  Network0:nic1,
  Network1:nic2,
  Network2:nic3,
  Network3:nic4,
  Name:VirtualMachine1
}

SecondObject:{
  Network0:nic1,
  Network1:nic2,
  Name:VirtualMachine1
}

Network 属性是通过Add-Membercmdlet添加的导出为CSV,当我的问题是,Network2Network3从第一个对象的属性被裁切,我得到的列是Network0Network1Name

我想知道有没有一种方法可以导出所有属性,如果其中一个对象没有该属性,只需分配$null

PS我有一个解决方案只是用循环手动添加这些字段,但我想知道也许我错过了PowerShell中内置的更干净的解决方案?

更新:

我发现它为第一个对象中的文件提供了相同的列。所有其他字段都将被忽略。所以更准确地说,我需要所有对象中的所有列。如果某些对象没有该字段,则应将其打印为空。

安东·克鲁格洛夫

只需几行代码即可添加缺失的属性。

#sample setup
$one = [pscustomobject]@{
    Network0='nic1'
    Network1='nic2'
    Network2='nic3'
    Network3='nic4'
    Name='VirtualMachine1'
}


$two = [pscustomobject]@{
    Network0='nic1'
    Network1='nic2'
    Name='VirtualMachine2'
}

$three = [pscustomobject]@{
    Network0='nic1'
    Name='VirtualMachine3'
}

$export = ($one,$two,$three)

#build list of all properties available to $allProps
$export | % -begin { $allProps = @() } -process { $allProps = [linq.enumerable]::union([object[]](($_.psobject.Properties).Name), [object[]]$allProps) }

#convert each object in $export to new custom object having all properties and put to $result
$export | % -begin { $result = @() } -process { $__ = $_; $o = @{ }; $allProps | %{ $o += @{ $_ = $__.$_ } }; $result+=[pscustomobject]$o }

#export $result to csv
$result | Export-Csv $env:TEMP\export.csv -NoTypeInformation -Force

Get-Content $env:TEMP\export.csv

"Network1", "Network3", "Network0", "Name", "Network2"
"nic2", "nic4", "nic1", "VirtualMachine1", "nic3"
"nic2",, "nic1", "VirtualMachine2",
 ,, "nic1", "VirtualMachine3",
>> Script Ended

注意事项:

  • [linq.enumerable]::union 用于轻松构建所有对象中所有可用属性的列表。
  • ($_.psobject.Properties).Name是 的快捷方式@($_.psobject.Properties | select -ExpandProperty Name),它包含属性名称数组
  • $__ = $_嵌套循环的一个技巧
  • $o += @{ $_ = $__.$_ }将键值对添加到输出对象;这里的技巧是,即使导出对象$_='nic4'中不存在$__属性,powershell 也不会抛出错误并返回 $null。请注意,这在Set-StrictMode设置-Version 2或以后不起作用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将大数组变量(类型=对象)导出到CSV文件

如何将逗号分隔的对象导出到 .csv 文件中

角5:如何将数据导出到csv文件

如何将“For”循环导出到 csv 文件?

如何将gatling日志文件导出到csv

如何将PostgreSQL查询输出导出到csv文件

如何将多行导出到 csv 文件

如何将json数据导出到csv或txt文件

如何将NUMPY数组导出到CSV或EXCEL文件

如何将数组列表导出到csv文件中?

如何将tibble导出到.csv

如何将Powershell导出到文件

如何将CSV文件导入HTML表单,以及如何将HTML表单导出到CSV文件

Angular JS-如何将Javascript对象导出到XLS文件?

如何将pagerank的结果作为csv文件导出到GraphLab Create中的磁盘?

如何将 3d numpy 数组中的所有信息导出到 csv 文件

如何将关闭的工作簿表导出到.CSV文件?

使用SSIS,如何将SQL结果导出到多个CSV文件?

对于每个循环,如何将数据导出到CSV文件中的新行?

如何将查询结果直接从RubyMine导出到本地CSV文件

如何将包含逗号的HTML表格数据导出到.csv文件?

如何将架构中的整个活动记录导出到csv文件

如何将所有Hive数据库及其表导出到csv或txt文件

如何将XML Powershell system.object []数组导出到CSV文件

如何将csv文件复选框值导出到ruby中的ruby表中?

如何将数据帧列表导出到每个 csv 文件?

Bash脚本:如何将文件名作为标头导出到csv

如何将终端上的数据值导出到Bash中的CSV文件

如何将单元格的一个字母导出到CSV文件?