В PowerShell для экспорта массивов данных в CSV файлы можно использовать командлет Export-CSV. В этой статье мы покажем, как экспортировать данные в CSV файл и добавить в него дополнительные строки.
Следующая команда экспортирует список служб Windows в CSV файл:
Get-Service |select-object Name,DisplayName,Status | Export-CSV "C:\PS\services.CSV" -NoTypeInformation -Encoding UTF8
Откройте полученный CSV файл с помощью любого текстового редактора. Как вы видите, в первой строке указаны названия столбцов (атрибуты объекта PowerShell, в нашем примере вы выбрали определенные поля с помощью select-object), и далее построчно идут данные, разделенные запятыми.
По-умолчанию в качестве разделителя (делиметера) в CSV используется запятая. Вы можете задать другой разделитель (точку с запятой, двоеточие и т.д.) с помощью параметра –Delimiter.
Например, укажем что в качестве разделителя нужно использовать точку с запятой:
Get-Service | Export-CSV "C:\PS\services.CSV" -NoTypeInformation -Encoding UTF8 -Delimiter ";"
Вы можете использовать разделитель в зависимости от региональных настроек Windows. Для этого используется параметр -UseCulture.
Get-Process | Export-Csv "c:\ps\process.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:\ps\freespace.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:
- Сформировать список компьютеров в AD c помощью Get-ADComputer
- Получить информацию о пользователях через Get-ADUser
- Найти неактивных пользователей/компьютеры в домене
- Выгрузить информацию о входах пользователей в Azure
- Экспортировать историю (логи) RDP подключений
- Создать отчет со статусом активации Windows на компьютерах в домене.