2

我只能在将其导出到 csv 时获得长度,应该如何正确完成。

$redo = Import-CSV c:\temp\testimport.txt | Group-Object email |
foreach {  "{0} ,{1}" -f $_.Name, (($_.Group | foreach { $_.group }) -join ', ')

}

$redo | Export-CSV c:\temp\test.csv -NoTypeInformation
#

“长度”“46”“59”“110”“47”“149”“38”“69”“32”“62”“29”“49”“31”“27”“48”“55”“42” "

4

3 回答 3

4

Export-Csv需要一个具有属性的对象(或对象列表),而您的命令管道会生成一个字符串数组。如果将此数组提供给Export-Csvcmdlet,则获取每个给定项目的属性(仅Length用于字符串)并将这些属性写入输出文件。

您需要构建具有所需属性的对象列表,例如:

Import-CSV c:\temp\testimport.txt `
  | Group-Object email `
  | select @{n="Name";e={$_.Name}},@{n="Group";e={($_.Group | %{$_.group}) -join ', '}} `
  | Export-CSV c:\temp\test.csv -NoTypeInformation
于 2013-03-20T21:48:22.420 回答
0

这正是我想要的。所以我要补充一下我的评论,以确保每个人都能理解。


不起作用

$str_list = @('Mark','Henry','John')
$str_list | Export-Csv .\ExportStrList.csv -NoType

因为Export-Csv需要对象和输出属性。String[ ] 的唯一属性是Length,因此 CSV 文件仅包含长度。

为了解决这个问题,就像上一个人说的那样,我们需要将 String[ ] 更改为 Object[ ]。最简单的方法是使用Select-Object.


将每个字符串放入新 Object[] 的 Name 属性中,如下所示:

$str_list = @('Mark','Henry','John')
$str_list = $str_list | Select-Object @{Name='Name';Expression={$_}}
$str_list | Export-Csv .\ExportStrList.csv -NoType

只是为了重新迭代,Select-Object输出一个可以轻松操作的自定义 PSObject。这是非常强大的信息,请明智地使用它。

于 2014-07-16T12:29:10.467 回答
0

显示的将数据转换为对象的方法是一种非常冗长的方法,至少在我的情况下是这样。我正在开发与 IBM V7000 SAN 存储子系统集成的报告,它是 CLI,我可以使用 putty plink 从 PS 调用它,根据查询返回表格输出(可以是 CSV)或列表。我希望将数据导出为 CSV。从列表输出中,我循环遍历结果集(一行 = 一个字段)并将字段组合成一个字符串,用逗号分隔值。(对于表格输出,我可以跳过这个繁琐的步骤。)

以下工作将输出写入 CSV 文件,然后我可以将其作为电子表格打开。

$fhStream = [System.IO.StreamWriter] "20150527_QALUNTable.csv" 
$fhStream.WriteLine($stColumnHeadings)
$fhStream.WriteLine($stColumnValues)
$fhStream.Close()

Import-Csv 将输入作为一个对象返回,我可以轻松地使用该对象来准备我的报告(这些文件由许多这样的输出文件组装而成,每个文件都在一个单独的时间点收集——因此是 datestamp 前缀)。

这里有 57 列数据,因此通过转换为 CSV,我可以避免准备 57 个对象语句。

(在http://blogs.technet.com/b/gbordier/archive/2009/05/05/powershell-and-writing-files-how-fast-can-you-找到 .Net 编写输出的技术(最快)写入文件.aspx )

于 2015-05-28T17:21:45.583 回答