2012-06-23 46 views
1

已做谷歌搜索,但没有找到合适的解决办法PowerShell的hastables的阵列转换成CSV

 $a = @(
      @{"name"="a"; "value"="1"}, 
      @{"name"="b"; "value"="2"} 
     ) 

    Foreach($x in $a){ 
      $obj = New-object psobject 
      Foreach($key in $x.keys) { 
       $obj ¦ add-member -membertype NoteProperty -name $key -value $x[$key] 
      } 
      $obj ¦ export-cvs test.csv 
    } 

我得到了驾驶室只有最后一行。我想要所有行

+0

您不能将具有相同名称的元素两次添加到PSObject。你可以使用自定义表格 – LaPhi

回答

0

您每次都覆盖csv文件。尝试每次使用convertTo-CSV(而不是export-csv)并将其附加到文件中。

+0

原谅我的无知,但如何追加?我在export-csv和converted-csv上得到了帮助,但没有看到append? –

+0

BartekB对标题做了很好的说明。使用这种方法,您不会得到您想要的,因为每个convertto-csv调用的输出都将拥有自己的头。 BartekB的解决方案,使用哈希表来创建自定义对象,并在这些集合上使用export-csv是一个更好的解决方案。为了完整起见,我打算使用set-content和-append开关来完成输出。我应该更加明确。 –

1

这是事实,Export-Csv不会追加(< v3),但我不认为ConvertTo-Csv将解决问题......最后,您将获得文件,并为您的数组中的每个对象重复标题。我建议两两件事之一:

  • 举动出口-CSV以外的foreach {}(需要把它的子表达式,虽然,因为这将是不可能的管道将其默认值)
  • 使用Foreach-而不是对象,并得到相同的结果

我也建议使用新物体PSObject,物业参数,而不是后来加入的成员:因为您使用哈希表的魅力你是成功了一半,见附件代码示例:

# Using $(foreach ($x in $a) {}) | Export-Csv 
$(Foreach($x in $a){ 
    New-object psobject -Property $x 
}) | Export-Csv test.csv 

# Using $a | Foreach-Object {} | Export-Csv 
$a | ForEach-Object { 
    New-Object PSObject -Property $_ 
} | Export-Csv test.csv