Найти в Дзене
ProPowershell.ru

Основы Powershell. Как сохранить вывод в файл

Оглавление

Здесь мы рассмотрим некоторые возможности powershell при сохранении данных в файл. Этот функционал применяется практически всегда, когда речь заходит о больших выгрузках, о результатах работы каких-либо автоматизаций. Банальным примером будет настройка логирования выполнения скрипта в планировщике задач.

Экспорт данных в файл. Add-Content, Set-Content

Исходя из названия команд, не сложно догадаться, как они работают. Командлет Add-Content выполняет добавление информации в указанный файл. В то время как Set-Content выполняет полную перезапись файла теми данными, которые он получил на вход.

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

Get-Process | Set-Content -Path D:\Processes.txt

Так как командлет по умолчанию ожидает получение параметра -Path, его имя можно опустить: “Set-Content D:\processes.txt “.

Так же здесь работает принцип конвейеризации – "Hello World!" | Add-Content C:\Test.txt или Set-Content C:\Test.txt -Value "Hello World!" по принципу действия будут похожи. За тем исключением, что в первом случае данные передаются по конвейеру, а во втором указаны явно в параметре -Value.

Out-File

Out-File – пожалуй основной способ сохранения текстовых данных на жесткий диск. Этот командлет является более универсальной альтернативой командам Add-Content и Set-Content. Этот командлет выводит в файл данные в том виде, в котором они поступают ему на вход. По этой причине его довольно часто используют в связке с командами, предварительно конвертирующими вывод в необходимый формат. Примером таких команд могут служить команды ConvertTo-Csv, ConvertTo-Html, ConvertTo-Json, ConvertTo-Xml. О том как получить справку по командам, можно узнать здесь .

Get-Volume | ConvertTo-Html | Out-File C:\ProcessList.html

В этом примере перед сохранением в файл данные конвертируются в HTML код. И Вы можете сохранить их в HTML документ. При этом возможно вносить элементы форматирования страницы, используя CSS. Если есть необходимость просто сохранить данные на диск в первозданном виде, тогда необходимо просто использовать командлет Out-File.

Некоторые полезные параметры:

  • -Force – выполнение с этим ключом приведет к перезаписи файла в случае его существования на момент выполнения команды;
  • -Append – если файл уже существует, то выполнение с этим ключом не перезапишет весь файл. А данные будут добавлены в конец файла. Отличный способ для настройки логирования. В сочетании с параметром -Force данные будут добавлены в файл даже при установленном флаге – только чтение;
  • -Encoding – позволяет определять кодировку для данных перед их записью в файл;
  • -NoClobber – при указании этого параметра, если файл уже существует с таким именем, он не будет перезаписан.

Подробнее

Export-Csv

Этот вид экспорта наиболее подходит и чаще всего применяется для формирования табличных выгрузок или отчетов. В параметрах этого командлета есть возможность указать, какой символ будет служить разделителем. Для демонстрации выгрузим все виртуальные машины на хосте виртуализации в файл .csv. Подробнее

Get-VM | Select-Object Name, State, Uptime, Status, Version | Export-Csv D:\VM.csv -Delimiter ";" -Encoding UTF8

В результате будет получен файл примерно следующего вида и содержания:

  • Просмотр в блокноте:
CSV файл в блокноте
CSV файл в блокноте
  • Просмотр в табличном редакторе:
CSV файл в табличном редакторе
CSV файл в табличном редакторе

Как Вы видите, теперь содержимое файла автоматически распределилось по колонкам. А чтобы из шапки документа убрать тип выгружаемых данных, к команде необходимо добавить параметр -NoTypeInformation .

Импорт данных из файла. Get-Content

Если есть необходимость загрузить в скрипт содержимое файла для его обработки, тогда Вы можете использовать Get-Content. В таком случае в результате выполнения Вы получите одномерный массив объектов. Где каждая строка будет являться независимым друг от друга объектом. Подробнее

Пример работы Get-Content
Пример работы Get-Content

Import-CSV

Как и в случае с экспортом в csv, импорт имеет возможность указать разделитель. Таким образом в результате импорта у каждого объекта (строки) будет набор параметров, соответствующий названиям колонок в файле. И к этим параметрам можно обращаться программно.

Выполним обратную процедуру и импортируем список виртуальных машин.

$VM = Import-CSV D:\VM.csv -Delimiter ";"
$VM | Where-Object Name -eq "ADMain"
Пример работы Import-CSV
Пример работы Import-CSV

Как видите, в данном случае, в отличие от команды Get-Content, Вы можете теперь обращаться к конкретным объектам по их параметрам. В данном случае мы получили объект, у которого параметр Name = “ADMain”. Подробнее