Export-CSV: Экспорт данных в CSV файл с помощью PowerShell

В PowerShell для экспорта массивов данных в CSV файлы можно использовать командлет Export-CSV . В этой статье мы покажем, как экспортировать данные в CSV файл и добавить в него дополнительные строки.

CSV формат представляет собой текстовый файл для хранения табличных данных, в котором значения разделены специальным символом-разделителем. Командлет Export-CSV преобразует полученный объект PowerShell в список строк с разделителями и сохраняет эти строки в указанный файл.

Следующая команда экспортирует список служб Windows в CSV файл:

Get-Service |select-object Name,DisplayName,Status | Export-CSV "C:PSservices.CSV" -NoTypeInformation -Encoding UTF8

Откройте полученный CSV файл с помощью любого текстового редактора. Как вы видите, в первой строке указаны названия столбцов (атрибуты объекта PowerShell, в нашем примере вы выбрали определенные поля с помощью select-object), и далее построчно идут данные, разделенные запятыми.

выгрузка данных в CSV файл с помощью PowerShell

По-умолчанию в качестве разделителя (делиметера) в CSV используется запятая. Вы можете задать другой разделитель (точку с запятой, двоеточие и т.д.) с помощью параметра –Delimiter .

Например, укажем что в качестве разделителя нужно использовать точку с запятой:

Get-Service | Export-CSV "C:PSservices.CSV" -NoTypeInformation -Encoding UTF8 -Delimiter ";"

Вы можете использовать разделитель в зависимости от региональных настроек Windows. Для этого используется параметр -UseCulture .

Get-Process | Export-Csv "c:psprocess.csv" -UseCulture

Вы можете также получить разделитель по-умолчанию из региональных настроек Windows:

(Get-Culture).TextInfo.ListSeparator

По умолчанию командлет Export-CSV создает новый CSV файл (если файл уже существует, он перезаписывается/заменяется новым). Если вы хотите добавить новые строки в уже существующий CSV файл, нужно использовать параметр -Append.

Например, вы хотите по расписанию запускать PowerShell скрипт, который проверяет свободное место на диске и добавляет текущее значение в CSV файл:

$cur_time=get-date -Format u
$freedisksize=Get-CimInstance -Class Win32_LogicalDisk |Where-Object {$_.DeviceID -eq "C:"} |select DeviceID,FreeSpace

Теперь нужно добавить дату в таблицу (объект) в качестве одного из полей:

$freedisksize| add-member -membertype NoteProperty -name Date -value  $cur_time

Экспорт объекта PowerShell в CSV файл:

$freedisksize| Export-Csv -Path C:psfreespace.csv -Delimiter ";" -NoTypeInformation -Append

export-csv дописать данные в файл с помощью append

Также вы можете использовать следующие дополнительные параметры Export-CSV:

  • -Encoding – позволяет указать кодировку CSV файла (по умолчанию используется utf8NOBOM). В большинстве случае я указываю тут UTF8;
  • -Force – перезапишет доступный на чтение файл;
  • -NoClobber – не перезаписывать файл, если он существует;
  • -Header – добавить заголовок в CSV файл (если он отсутствует);
  • -IncludeTypeInformation/-NoTypeInformation –добавить/не добавлять в заголовок файла строку #TYPE с информацией о типе объекта (например, #TYPE System.Diagnostics.Process или #TYPE System.Service.ServiceController ). Начиная с PowerShell 6 информация TYPE в заголовке не выводится по-умолчанию;
  • UseQuotes (появился в версии PowerShell Core 7.x ) – нужно ли заключать значения в кавычки или нет (AsNeeded/ Always (default)/Never)

В дальнейшем вы можете обрабатывать полученный CSV файл в Excel или других программах.

Командлет Export-CSV часто используется для построения различных табличных выгрузок и отчетов. Ниже несколько примеров полезных отчетов для системного администратора, которые можно сформировать с помощью Export-CSV:

Для загрузки (импорта) данных из CSV файла в PowerShell используется командлет Import-CSV .

EnglishRussianUkrainian