5

已经完成谷歌搜索,但没有找到合适的答案

我有

     $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
     }

我在驾驶室只得到最后一行。我想要所有的线条

4

2 回答 2

3

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

  • 将 Export-Csv 移到 foreach {} 之外(但需要将其放在子表达式中,因为默认情况下无法通过管道传输它)
  • 改用 Foreach-Object 并获得相同的结果

我还建议使用 New-Object PSObject -Property 参数而不是稍后添加成员:因为您使用哈希表作为基础,所以您已经完成了一半,请参阅附加的代码示例:

# 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
于 2012-06-24T13:12:55.627 回答
0

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

于 2012-06-24T01:55:39.510 回答