Экспорт-Csv: Преобразование объектов в файлы CSV эффективно

Если вам нужно отправить информацию из PowerShell в файл CSV, вам поможет команда Export-CSV. Эта команда позволяет администраторам сэкономить много времени, переводя свободный текст в структурированный формат. Вместо того, чтобы возиться с Excel, мы можем использовать PowerShell для создания файлов CSV.

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

Формат CSV представляет собой простой текстовый файл, в котором строки разделены запятыми. Поскольку это просто текстовый файл, мы теоретически могли бы использовать общую команду для работы с текстовыми файлами, такую как Set-Content, чтобы выполнить задачу. Однако для использования общей команды нам нужно было бы самостоятельно создавать необходимую структуру CSV. Зачем делать это, когда у нас уже есть команда для экспорта CSV – Export-Csv, которая отправляет вывод в файл?

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

Управление и отчетность в Active Directory, Exchange и Microsoft 365 с помощью ManageEngine ADManager Plus. Скачайте бесплатную пробную версию!

Объекты -eq Строки CSV

Export-Csv cmdlet имеет одну цель: сохранить объекты PowerShell в файл CSV.

Предположим, у вас есть объект с двумя свойствами, называемыми foo и bar. Каждое из этих свойств имеет соответствующие значения 1 и 2. Когда вы отправляете этот объект в Export-Csv, он создает файл CSV с двумя столбцами и одной строкой. Затем вы можете импортировать содержимое CSV и проверить, как оно выглядит.

PS> $testObject = [pscustomobject]@{'foo' = 1; 'bar' = 2}
PS> $testObject | Export-Csv -Path C:\TestObject.csv
PS> $testObject
foo	bar
1 	2
PS> Import-Csv -Path C:\TestObject.csv
foo	bar
1  	2

PowerShell в основном обрабатывает объект в памяти и файл CSV одинаково! Кроме того, мои заголовки столбцов должны быть заголовками. Экспорт объектов с использованием этой командлета подобен сохранению объекта в файловой системе. С помощью общей текстовой команды PowerShell Get-Content мы можем проверить исходный текст, чтобы увидеть, что была экспортирована команда Export-Csv.

PS> Get-Content -Path C:\TestObject.csv

#ТИП System.Management.Automation.PSCustomObject
"foo","bar" "1","2"

Обратите внимание, что команда использует двойные кавычки вокруг каждой записи строки. Это позволяет включать поля со пробелами.

Полезные параметры Export-CSV

В Windows PowerShell 5.1 команда Export-CSV выводит тип объекта, который создал файл CSV. Если вы не хотите видеть эту строку, популярным параметром является NoTypeInformation, который полностью удаляет эту строку.

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

Еще один полезный параметр – Delimiter. Иногда вам может понадобиться создать файл CSV, который не использует обычный разделитель списка (запятую) для разделения полей. Вместо этого, возможно, вам нужно создать файл с большим количеством данных, в котором в качестве разделителей используются табуляции или даже точки с запятыми. Командлет Export-Csv в PowerShell может помочь нам с этим, указав любой разделитель, который нам нужен.

PS> $testObject | Export-Csv -Path C:\TestObject.csv -Delimiter "`t"
PS> Get-Content -Path C:\TestObject.csv

#ТИП System.Management.Automation.PSCustomObject
"foo"   "bar" "1"     "2"

Работа с кавычками

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

Ниже вы можете увидеть пример создания файла CSV. Затем Get-Content читает сырой текстовый файл, заменяет все двойные кавычки в памяти на пустоту. Затем Set-Content записывает эту информацию из памяти обратно на диск.

$testObject | Export-Csv -Path C:\TestObject.csv
(Get-Content -Path C:\TestObject.csv -Raw).replace('"','') | Set-Content -Path C:\TestObject.csv

Управляйте и отчетность по Active Directory, Exchange и Microsoft 365 с помощью ManageEngine ADManager Plus. Скачать бесплатную пробную версию!

Сводка

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

I’m not about to go back to batch, or VBScript where creating a CSV file from an existing object required instantiating a FileSystemObject, creating a loop and a bunch of Write() methods!

Эта команда – еще одна причина начать писать код PowerShell уже сегодня!

Source:
https://adamtheautomator.com/export-csv/