如何将PowerShell对象数组拆分导出为多行CSV文件?
解决PowerShell嵌套数组对象导出CSV的问题
当你的PowerShell对象包含数组类型的属性时,直接用Export-Csv会把数组显示为System.Object[],而非展开每个元素。要得到预期的CSV格式,需要先遍历每个对象的Address数组,为每个地址生成一条独立记录,再导出。
假设你的对象数组存储在$users变量中,执行以下代码即可:
$users | ForEach-Object { # 保存当前用户的固定属性 $currentName = $_.Name $currentPhone = $_.Phone # 遍历每个地址,生成新的扁平对象 $_.Address | ForEach-Object { [PSCustomObject]@{ Name = $currentName Address = $_ Phone = $currentPhone } } } | Export-Csv -Path "output.csv" -NoTypeInformation -Encoding UTF8
代码说明
- 外层
ForEach-Object遍历每个用户对象,先保存Name和Phone的固定值 - 内层
ForEach-Object遍历当前用户的Address数组,为每个地址创建包含完整用户信息的新对象 - 最后通过管道将所有扁平对象传给
Export-Csv,-NoTypeInformation参数会去掉CSV开头的类型注释行,-Encoding UTF8确保字符编码正常
执行后生成的CSV文件就会和你预期的格式一致:
"Name","Address","Phone" "Bob","adr1","123" "Bob","adr2","123" "Bob","adr3","123" "Alice","adr4","456" "Alice","adr5","456" "Alice","adr6","456"
内容的提问来源于stack exchange,提问作者Bozz
相关产品推荐
相关产品推荐

