我是PowerShell的新手,并尝试以写入方式学习东西,我注意到在这种情况下我可以用多种不同的方式导出数据,我想问的是这种情况,
Get-Process | ConvertTo-Csv | Set-Content -Path .\Process.txt
和:
Get-Process | Export-Csv -Path .\Process.txt
两者都将进程列表导出到桌面上的CSV文件中,并给出相同的结果。
第一个:
首先将进程转换为CSV然后将其写入文件。
第二个:
将进程直接导出到文件。
两种情况之间真正区别的是性能差异,时间执行差异,还是其他我不知道的事情?
答案 0 :(得分: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-CSV
和ConvertTo-CSV
运行了相同代码的90%。它们共享相同的辅助类Microsoft.PowerShell.Commands.ExportCsvHelper
以创建标头并将对象转换为csv。唯一的区别是ConvertTo-CSV
使用WriteObject()
将CSV对象(字符串)写入管道,而Export-CSV
使用StreamWriter
直接将其写入文件。
要自己查找,可以查看Microsoft.PowerShell.Commands.Utility.dll
内部。我不会直接发布代码,因为我不确定它是否合法。 : - )
如果您需要通过第三方API等显示或发送CSV输出,请使用ConvertTo-CSV
。如果您需要存储在CSV文件中的数据,则应使用Export-CSV
。