export csv powershell примеры

Сам CSV подразумевает что это текстовый файл или просто тип записи, где значения разделены запятыми. При этом не всегда значение разделяются запятыми, это могут быть и двоеточия, или точки запятыми и т.д. Сам выгруженный CSV файл выглядит так:

Для того, что бы узнать какие командлеты есть для работы с csv в Powershell нужно выполнить команду:

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

Для того что бы экспортировать данные мы должны использовать pipeline (конвейер), т.е. | , который к каждому объекту Get-Proccess применит Export-CSV:

По умолчанию данные экспортируются с разделителем в виде запятой. Сам разделитель называется делиметром и если мы планируем открывать файл в какой-то программе, например экспортируем для Excel, может потребоваться другой делимитер. Например Excel берет делимитер из региональных настроек:

Или мы можем узнать его с помощью командлета:

Изменять системный делимитер я бы не советовал, а вот экспортировать данные в нужном формате можно так:

Если мы будем запускать такой экспорт на многих удаленных компьютерах, то можно подставить делимитер у каждого свой. Просто объявим переменную:

Или аналогичный командлет для примера:

Если мы добавим ключ -NoTypeInformation у нас не будет добавляться строчка с информацией типа TYPE:

Теперь импортируем этот же файл в Powershell. Мы так же можем указать нужный делимитер или использовать ключ -UseCulture:

Формат вывода csv в powershell, по умолчанию, в виде листа. Для того что бы сделать вывод в формате таблицы добавим pipeline и команду Format-Table (алиас ft ). Пример:

Теперь рассмотрим вариант, который я буду применять в работе. Я хочу следить за динамикой роста занятого места на диске что бы вовремя его расширить или принять меры что бы освободить место. Для того что бы получить такие данные я использую:

Где:
—Filter «Device » — фильтруем данные по букве диска. В моем случае это системный диск.

Меня интересует только буква диска, занятое место, и сколько всего места. Добавляем конвейер с выбором нужных колонок:

Меня не интересуют значения в гигабайтах. Вычисляю эти значения:

При этом я должен знать дату, когда значения получены:

Объявляем все это в переменные:

Добавляю дату к колонкам информации о дисках:

Проверяю что переменная выводит то, что нужно:

И заношу все это в файл:

Где ключ:
-InputObject — мы можем использовать этот ключ или конвейер для передачи объектов
-Append — говорит о том, что мы не перезаписываем файл, а добавляем в него новые значения. При этом если он не был создан, то он создастся.

Среди дополнительных ключей, которые я не использовал, есть:
-Encoding — который дает возможность кодировку для импорта и экспорта. По умолчанию используется UTF8NoBOM.
-Force — перезапишет файл, который был только для чтения.
-NoClobber — не перезапишет файл, если он уже существует
-Header — добавит заголовок там, где он отсутствует.

У нас осталось еще два похожих командлета. Они, в отличие от предыдущих, не записывают данные в файл, а выводят на экран. Для того что бы преобразовать в формат CSV:

Для того что бы выполнить обратное преобразование:

Остальные варианты выполнения этих комманд можно получить через справку:

I want to export Write-Host «$computer$DESTINATION» to the CSV files so I know which computers were offline when the script ran.

I am running this from a Windows 7 machine

4 Answers 4

This solution creates a psobject and adds each object to an array, it then creates the csv by piping the contents of the array through Export-CSV.

If you pipe a string object to a csv you will get its length written to the csv, this is because these are properties of the string, See here for more information.

This is why I create a new object first.

Try the following:

This will give you:

If you use the Get-Member on Write-Output as follows:

You will see that it has one property — ‘length’:

This is why Length will be written to the csv file.

Update: Appending a CSV Not the most efficient way if the file gets large.

Get-Service -Name «wuauserv» -ComputerName «server1», «server2», «server3» | FT -Property MachineName, Status, Name | Export-Csv -Path C: mpwuausrv_status.csv -Delimiter «;» -Encoding Unicode

  • Вопрос задан более года назад
  • 819 просмотров

используйте ключ -NoTypeInformation

Get-Service -Name «wuauserv» -ComputerName «server1», «server2», «server3» | FT -Property MachineName, Status, Name | Export-Csv -Path C: mpwuausrv_status.csv -Delimiter «;» -Encoding Unicode -NoTypeInformation

хорошо. вместо ФТ в команде поставьте select.

Источник: computermaker.info

Техника и Гаджеты
Добавить комментарий