2012-06-23 51 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