1

我是新來的PowerShell,並努力學習的東西寫了,我注意到,在這種情況下,我可以在許多不同的方式導出數據,我要問的是這種情況下,PowerShell:(ConvertTo- * | Set-Content)和(Export- *)之間的區別?

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

和:

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

兩者都將進程列表導出到我的桌面上的CSV文件中,並給出相同的結果。

第一個:

的流程,以CSV轉換第一然後將其寫入到文件中。

第二個:

直接導出過程的文件。

這兩種情況之間究竟有什麼區別,是有性能差異,時間執行差異還是其他我不知道的東西?

回答

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使用WriteObject()將CSV對象(字符串)寫入管道,而Export-CSV使用StreamWriter直接將其寫入文件。

要親自找到它,您可以查看Microsoft.PowerShell.Commands.Utility.dll。我不會直接發佈代碼,因爲我不確定它是否合法。 :-)

如果您需要通過第三方API等顯示或發送CSV輸出,請使用ConvertTo-CSV。如果您需要將數據存儲在CSV文件中,則應使用Export-CSV

+0

很乾淨,理解@Frode thx – AymenDaoudi