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 используется запятая. Вы можете задать другой разделитель (точку с запятой, двоеточие и т.д.) с помощью параметра –Delimiter.
Например, укажем что в качестве разделителя нужно использовать точку с запятой:
Get-Service | Export-CSV "C:PSservices.CSV" -NoTypeInformation -Encoding UTF8 -Delimiter ";"
Вы можете использовать разделитель в зависимости от региональных настроек Windows. Для этого используется параметр -UseCulture.
Get-Process | Export-Csv "c:psprocess.csv" -UseCulture
(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:
- -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:
Windows 10
Export-CSV: Экспорт данных в CSV файл с помощью PowerShell