1

我是 PowerShell 的新手,并尝试以编写方式学习东西,我注意到在这种情况下我可以以多种不同的方式导出数据,我想问的是这种情况,

Get-Process | ConvertTo-Csv | Set-Content -Path .\Process.txt

和 :

 Get-Process | Export-Csv -Path .\Process.txt

两者都将进程列表导出到我桌面上的 CSV 文件中,并给出相同的结果。

第一个 :

首先将进程转换为 CSV,然后将其写入文件。

第二个 :

将进程直接导出到文件。

这两种情况的真正区别是什么,是否存在性能差异、时间执行差异或其他我不知道的东西?

4

1 回答 1

3

它们几乎相同。在性能和时间方面应该没有什么大的区别:

Measure-Command { Get-Process | ConvertTo-Csv | Set-Content -Path .\Process.txt }  

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 2
Milliseconds      : 880
Ticks             : 28801761
TotalDays         : 3,33353715277778E-05
TotalHours        : 0,000800048916666667
TotalMinutes      : 0,048002935
TotalSeconds      : 2,8801761
TotalMilliseconds : 2880,1761 

Measure-Command { Get-Process | Export-Csv -Path .\Process2.txt }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 2
Milliseconds      : 772
Ticks             : 27724661
TotalDays         : 3,20887280092593E-05
TotalHours        : 0,000770129472222222
TotalMinutes      : 0,0462077683333333
TotalSeconds      : 2,7724661
TotalMilliseconds : 2772,4661

这是因为Export-CSVConvertTo-CSV运行 90% 的代码相同。它们共享相同的帮助类Microsoft.PowerShell.Commands.ExportCsvHelper来创建标题并将对象转换为 csv。唯一的区别是使用ConvertTo-CSV将 CSV 对象(字符串)写入管道WriteObject(),而使用 .Export-CSV直接将其写入文件StreamWriter

要自己找到这个,你可以看看里面Microsoft.PowerShell.Commands.Utility.dll。我不会直接发布代码,因为我不确定它是否合法。:-)

如果您需要通过第三方 API 等显示或发送 CSV 输出,请使用ConvertTo-CSV. 如果您需要存储在 CSV 文件中的数据,那么您应该使用Export-CSV.

于 2014-07-26T21:50:07.420 回答