PowerShell: разница между (ConvertTo-* | Set-Content) и (Export-*)?

Я новичок в PowerShell и пытаюсь научиться писать, в этом случае я заметил, что могу экспортировать данные разными способами, о чем я хочу спросить, так это об этом случае,

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

а также :

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

Оба экспортируют список процессов в файл CSV на моем рабочем столе и дают тот же результат.

Первый:

Сначала преобразует процессы в CSV, а затем записывает их в файл.

Второй:

Экспорт процессов непосредственно в файл.

В чем на самом деле разница между двумя случаями, есть ли разница в производительности, разница во времени выполнения или что-то еще, о чем я не знаю?


person AymenDaoudi    schedule 26.07.2014    source источник


Ответы (1)


Они почти одинаковы. Не должно быть большой разницы, когда дело доходит до производительности и времени:

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 записывает CSV-объект (строку) в конвейер, используя WriteObject(), а Export-CSV напрямую записывает его в файл, используя StreamWriter.

Чтобы найти это самостоятельно, вы можете заглянуть внутрь Microsoft.PowerShell.Commands.Utility.dll. Я не буду публиковать код напрямую, потому что не уверен, законно это или нет. :-)

Если вам нужно, чтобы выходные данные CSV отображались или отправлялись через сторонний API и т. д., используйте ConvertTo-CSV. Если вам нужны данные, хранящиеся в CSV-файле, то вам следует использовать Export-CSV.

person Frode F.    schedule 26.07.2014