Вывод Powershell в файл

Обновлено: 21.11.2024

Вывод команд PowerShell по умолчанию отображается в терминале. Но в некоторых ситуациях полезнее перенаправить вывод в файл в PowerShell. Для этого мы воспользуемся командлетом Out-File.

Существуют разные способы вывода результатов сценария или команды PowerShell в файл. Можно даже показать вывод в терминале и одновременно экспортировать его в файл. А знаете ли вы, что вы также можете экспортировать только результаты успеха, предупреждения или ошибки?

В этой статье мы рассмотрим, как записать вывод в файл в PowerShell. Я также объясню, как вы можете добавить к существующему файлу или как вы можете создать файл журнала.

Запись вывода Powershell в файл

Есть несколько способов записать выходные данные PowerShell в файл. Наиболее распространенными способами являются использование командлета Out-File или оператора перенаправления > . Другие варианты — использовать командлет Set-Content и Add-Content. Мы сосредоточимся на первых двух, но я кратко упомяну об альтернативе, если она уместна.

Командлет Out-File и оператор перенаправления > позволяют записывать и добавлять ( >> ) выходные данные PowerShell в файл. Разница между ними заключается в том, что первый принимает параметры, а второй — нет.

С командлетом Out-File мы можем использовать следующие параметры:

Если вы не укажете какой-либо другой параметр, то командлет Out-File и оператор перенаправления по умолчанию перезапишут любой существующий файл. Мы можем предотвратить это, добавив в командлет параметр -NoClobber

Обратите внимание, что вы не можете предотвратить перезапись с помощью оператора перенаправления

Если файл уже существует, будет выдано сообщение об ошибке:

Если вы хотите вывести данные в файл внутри скрипта, я рекомендую сначала использовать командлет Test-Path, чтобы определить, существует ли уже файл. Таким образом, вы можете написать лучшее решение, например добавить дату к имени файла, вместо того, чтобы просто пытаться писать в него:

Присоединение PowerShell к файлу

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

Вы также можете добавить несуществующий файл. Оба метода создадут новый файл, если указанный файл не существует.

При добавлении вывода к существующему файлу содержимое будет помещено в новую строку. Если вы хотите разместить содержимое в одной строке, создав одну длинную строку, вам потребуется использовать командлет Out-File с параметром -NoNewLine.

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

Чтобы сделать результат более читабельным, я добавил точку с запятой ко всем значениям. Как видите, все результаты находятся в одной строке:

Использование дополнительного содержимого PowerShell

Еще один способ добавить содержимое в файл — использовать командлет Add-Content. Одним из самых больших преимуществ командлета Add-Content является то, что он позволяет добавлять содержимое сразу в несколько файлов.

Как и в случае с командлетом Out-File, оператор перенаправления создает с помощью командлета Add-Content новый файл, если файл не существует.

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

Чтобы добавить один и тот же контент в несколько файлов, у нас есть несколько параметров, которые помогут нам. Мы можем использовать подстановочные знаки в пути, чтобы указать файлы, которые мы хотим обновить. Кроме того, мы можем исключить имена файлов и даже использовать фильтр.

В приведенном ниже примере текущая дата будет добавлена ​​ко всем файлам TXT по пути c:\temp\files, за исключением файла с readme в имени файла:

Все файлы, кроме файлов readme, обновлены:

Параметры включения и исключения позволяют указать строковый массив файлов, которые вы хотите или не хотите обновлять.

Если мы возьмем приведенный выше пример, мы также можем использовать параметр фильтра для выбора только тех файлов, которые содержат слово log:

Записывать в файл только ошибки, предупреждения или успех

Командлет out-file запишет в файл только успешный результат вашей команды или сценария. Но иногда вы также хотите, чтобы выводились предупреждения или ошибки.

Для этого мы можем использовать оператор перенаправления. Он позволяет вам указать, какой поток вы хотите вывести в файл.

В качестве примера возьмем скрипт ниже:

Процесс Explorer2 не существует, поэтому командлет Get-Process выдаст ошибку. Если мы запустим скрипт таким образом, то файл process.txt будет полностью пуст.

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

Как видите, ошибка записывается в текстовый файл с помощью оператора перенаправления:

Запись Powershell в файл журнала

Лучший вариант для записи в файл журнала — использовать командлет Start-Transcript, но мы также можем написать собственную функцию журнала, используя командлет Add-Content или оператор перенаправления.

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

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

Таким образом, мы можем легко прочитать файл журнала и идентифицировать любые возникшие ошибки.

Вышеприведенная функция является примером простого средства создания файла журнала для PowerShell, которое позволяет записывать сообщения (события) в файл журнала с серьезностью и отметкой времени.

Подведение итогов

Как вы видели, в PowerShell есть несколько способов вывода результатов в файл. Чтобы быстро вывести что-то в файл, вы можете использовать оператор перенаправления или командлет Out-File.

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

Если вы ищете командлет PowerShell, который может сохранять выходные данные в текстовом файле, вам повезло. Вы скоро узнаете, как использовать командлет PowerShell Out-File вместе с его популярным параметром Out-File -Append!

Оглавление

Как работает Out-File?

Командлет PowerShell Out-File прост по своей сути. его единственная цель — сохранить полученный вывод и сохранить его в текстовом файле.

Out-File был разработан для замены стандартного оператора перенаправления вывода ( > ). Даже во времена DOS мы могли перенаправлять вывод в файл. Этот командлет позволяет сделать это с помощью PowerShell.

Командлет Out-File обычно используется в конце конвейера PowerShell. Его единственная цель - отправить необработанный вывод непосредственно в текстовый файл без учета этого. Существует минимум способов настроить способ записи этого вывода.

Отправка вывода в файл

Допустим, у вас есть сценарий, который возвращает список всех служб Windows на вашем компьютере. Когда вы запустите Get-Service , вы получите все объекты, которые вы могли бы ожидать на консоли.

Но, возможно, вы захотите сохранить результат в текстовом файле. Командлет Out-File — отличный способ сделать это. Вы можете использовать Out-File, перенаправляя к нему через конвейер практически все, что угодно.

Вы можете видеть ниже, что выходные данные Get-Service были отправлены командлету, который создал текстовый файл с именем Services.txt, который содержит точное изображение, которое вы видите в консоли.

Добавление к файлу

По умолчанию Out-File перезаписывает все в текстовом файле, предоставленном через параметр FilePath. Однако это поведение можно переопределить с помощью параметра Append.

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

При использовании параметра Out-File -Append, как показано ниже, обратите внимание, что если вы его не используете, файл C:\File.txt перезаписывается. Но как только вы нажмете параметр Append, он добавит вывод в конец.

Изменение вывода

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

Или вы также можете обрезать текст в каждой строке по определенному количеству символов с помощью параметра "Ширина".

Заключение

В реальных условиях командлет Out-File работает, но есть и более эффективные способы сохранения выходных данных в файл.

Командлет Out-File не предоставляет реальных возможностей для управления выводом. Он просто сохраняет вывод точно так, как показано в консоли. Этот командлет похож на стенограмму PowerShell, которая просто записывает все непосредственно в текстовый файл.

Командлеты Add-Content или Set-Content всегда будут более гибкими, но если вам нужен быстрый способ получить вывод PowerShell в файл, Out-File — это то, что вам нужно.

Ненавидите рекламу? Хотите поддержать писателя? Получите многие из наших руководств в виде руководства по ATA.

Ещё от ATA Learning & Partners

Резервное копирование Office 365 для чайников

Лучшее руководство по защите данных Microsoft Office 365. Изучите готовые функции безопасности.

Руководства ATA

ATA известна своими высококачественными письменными учебными пособиями в виде сообщений в блогах. Поддержите ATA с помощью электронных книг ATA Guidebook PDF, доступных в автономном режиме и без рекламы!

Командлет Out-File отправляет выходные данные в файл. Он неявно использует систему форматирования PowerShell для записи в файл. Файл получает то же представление на дисплее, что и терминал. Это означает, что выходные данные могут быть не идеальными для программной обработки, если только все входные объекты не являются строками. Когда вам нужно указать параметры для вывода, используйте Out-File, а не оператор перенаправления ( > ). Дополнительные сведения о перенаправлении см. в разделе about_Redirection.

Примеры

Пример 1. Отправка вывода и создание файла

В этом примере показано, как отправить список процессов локального компьютера в файл. Если файл не существует, Out-File создает файл по указанному пути.

Командлет Get-Process получает список процессов, запущенных на локальном компьютере. Объекты Process отправляются по конвейеру командлету Out-File. Out-File использует параметр FilePath и создает в текущем каталоге файл с именем Process.txt. Команда Get-Content получает содержимое из файла и отображает его в консоли PowerShell.

Пример 2. Предотвращение перезаписи существующего файла

В этом примере предотвращается перезапись существующего файла. По умолчанию Out-File перезаписывает существующие файлы.

Командлет Get-Process получает список процессов, запущенных на локальном компьютере. Объекты Process отправляются по конвейеру командлету Out-File. Out-File использует параметр FilePath и пытается выполнить запись в файл в текущем каталоге с именем Process.txt. Параметр NoClobber предотвращает перезапись файла и отображает сообщение о том, что файл уже существует.

Пример 3. Отправка вывода в файл в формате ASCII

В этом примере показано, как кодировать выходные данные с помощью определенного типа кодировки.

Командлет Get-Process получает список процессов, запущенных на локальном компьютере. Объекты процесса хранятся в переменной $Procs. Out-File использует параметр FilePath и создает в текущем каталоге файл с именем Process.txt. Параметр InputObject передает объекты процесса в $Procs в файл Process.txt. Параметр Encoding преобразует вывод в формат ASCII. Параметр Width ограничивает длину каждой строки в файле 50 символами, поэтому некоторые данные могут быть усечены.

Пример 4. Использование провайдера и отправка вывода в файл

В этом примере показано, как использовать командлет Out-File, когда вы не находитесь на диске поставщика файловой системы. Используйте командлет Get-PSProvider для просмотра поставщиков на локальном компьютере. Дополнительные сведения см. в разделе about_Providers.

Команда Set-Location использует параметр Path, чтобы задать текущее местоположение для псевдонима поставщика реестра: . Командлет Get-Location отображает полный путь для Alias: . Get-ChildItem отправляет объекты по конвейеру командлету Out-File. Out-File использует параметр FilePath для указания полного пути и имени выходного файла C:\TestDir\AliasNames.txt. Командлет Get-Content использует параметр Path и отображает содержимое файла в консоли PowerShell.

Пример 5. Установка ширины выходного файла для всей области

В этом примере используется $PSDefaultParameterValues, чтобы задать для параметра Width для всех вызовов Out-File и операторов перенаправления ( > и >> ) значение 2000. Это простой способ гарантировать, что везде в области вы выводите данные в формате таблицы. в файл, PowerShell будет использовать ширину строки 2000 вместо ширины строки, определяемой шириной консоли хоста PowerShell.

Дополнительную информацию о $PSDefaultParameterValues ​​см. в разделе about_Preference_Variables.

Параметры

Добавляет вывод в конец существующего файла.

Тип:SwitchParameter
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Запрашивает подтверждение перед запуском командлета.

< /tr>

Указывает тип кодировки для целевого файла. Значение по умолчанию — utf8NoBOM .

Для этого параметра допустимы следующие значения:

  • ascii : использует кодировку для набора символов ASCII (7-бит).
  • bigendianunicode : кодирует в формате UTF-16, используя порядок байтов с обратным порядком байтов.
  • bigendianutf32 : кодирует в формате UTF-32, используя порядок байтов с обратным порядком байтов.
  • oem : использует кодировку по умолчанию для MS-DOS и консольных программ.
  • Unicode : кодирует в формате UTF-16, используя порядок байтов с прямым порядком байтов.
  • utf7 : кодирует в формате UTF-7.
  • utf8 : кодирует в формате UTF-8.
  • utf8BOM: кодирует в формате UTF-8 с меткой порядка байтов (BOM).
  • utf8NoBOM: кодирует в формате UTF-8 без метки порядка байтов (BOM).
  • utf32 : кодирует в формате UTF-32.

UTF-7* больше не рекомендуется использовать. Начиная с PowerShell 7.1, выдается предупреждение, если вы укажете utf7 для параметра Encoding.

Тип:SwitchParameter
Псевдонимы:cf
Позиция:Имя
Значение по умолчанию:False
Принимать ввод конвейера:False
Допускать подстановочные знаки:False
Тип:Кодировка
Допустимые значения:ASCII, BigEndianUnicode, BigEndianUTF32, OEM , Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Позиция:1
Значение по умолчанию:UTF8NoBOM
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Указывает путь к выходному файлу.

< /tr>

Переопределяет атрибут только для чтения и перезаписывает существующий файл только для чтения. Параметр Force не отменяет ограничения безопасности.

Тип:Строка
Псевдонимы:Путь
Позиция:0
Значение по умолчанию:Нет
Принимать ввод конвейера:False
Допускать подстановочные знаки:False
Тип:SwitchParameter
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Определяет объекты, которые будут записаны в файл. Введите переменную, содержащую объекты, или введите команду или выражение для получения объектов.

Тип:PSObject
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:Истина
Допускать подстановочные знаки:False

Указывает путь к выходному файлу. Параметр LiteralPath используется точно так, как он введен. Подстановочные знаки не принимаются. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки сообщают PowerShell, что никакие символы не следует интерпретировать как управляющие последовательности. Дополнительные сведения см. в разделе about_Quoting_Rules.

Тип:String
Псевдонимы:PSPath, LP
Позиция:Имя
Значение по умолчанию:Нет
Принимать ввод конвейера:True
Допускать подстановочные знаки:False< /td>

NoClobber предотвращает перезапись существующего файла и отображает сообщение о том, что файл уже существует. По умолчанию, если файл существует по указанному пути, Out-File перезаписывает файл без предупреждения.

< /tr>

Указывает, что содержимое, записанное в файл, не заканчивается символом новой строки. Строковые представления входных объектов объединяются для формирования выходных данных. Между выходными строками не вставляются пробелы или символы новой строки. После последней выходной строки новая строка не добавляется.

Тип:SwitchParameter
Псевдонимы:NoOverwrite
Позиция:Имя
Значение по умолчанию:Нет
Принимать ввод конвейера:False
Допускать подстановочные знаки:False
Тип:SwitchParameter
Позиция:Именованный
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Показывает, что произойдет, если командлет запустится. Командлет не запущен.

< /tr>

Указывает количество символов в каждой строке вывода. Любые дополнительные символы усекаются, а не переносятся. Если этот параметр не используется, ширина определяется характеристиками хоста. По умолчанию для консоли PowerShell используется 80 символов. Если вы хотите контролировать ширину всех вызовов Out-File, а также операторов перенаправления ( > и >> ), установите $PSDefaultParameterValues['out-file:width'] = 2000 перед использованием Out-File .

Тип:SwitchParameter
Псевдонимы:wi
Позиция:Имя
Значение по умолчанию:False
Принимать ввод конвейера:False
Допускать подстановочные знаки:False
Тип:Int32
Позиция:Имя
Значение по умолчанию:Нет
Принять ввод конвейера:False
Допускать подстановочные знаки:False

Входные данные

Вы можете направить любой объект в Out-File .

Результаты

Нет

Out-File не генерирует никаких выходных данных.

Примечания

Входные объекты автоматически форматируются так же, как и в терминале, но вы можете использовать командлет Format-* для явного управления форматированием вывода в файл. Например, Get-Date | Список форматов | Исходящий файл out.txt

Чтобы отправить выходные данные команды PowerShell в командлет Out-File, используйте конвейер. Кроме того, вы можете сохранить данные в переменной и использовать параметр InputObject для передачи данных командлету Out-File.

Out-File сохраняет данные в файл, но не создает никаких выходных объектов для конвейера.

PowerShell — это оболочка командной строки, разработанная специально для системных администраторов. Это помогает администраторам управлять и автоматизировать администрирование операционных систем Windows и приложений, работающих на них. PowerShell имеет возможность сохранять выходные данные команд, которые вы запускаете в нем, в файл, который вы можете позже просмотреть, проанализировать и поделиться им с кем-то еще для устранения неполадок.

В этой статье я продемонстрирую шаги по сохранению вывода команды в файл. В строке поиска Windows введите powershell.exe и нажмите Enter на клавиатуре, чтобы запустить PowerShell.

Отправить вывод в файл в PowerShell

В окне PowerShell введите команду, а затем Out-File -FilePath .\filename.txt

Замените параметры Command, FilePath и FileName своей собственной командой, путем к файлу и именами одновременно. Если файл не существует, Out-File создаст файл с указанным именем и путем.

Например, я хочу вывести результат ipconfig в файл с именем ip.txt и сохранить его на рабочем столе. Команда будет такой:

Выполнение приведенной выше команды сохранит выходные данные ipconfig в виде файла ip.txt на рабочем столе. Если файл с некоторым содержимым уже существует, Out-file перезапишет его.

Запретить перезапись выходного файла

Чтобы предотвратить перезапись уже существующего файла, добавьте параметр -NoClobber после приведенной выше команды.

-NoClobber предотвращает перезапись и отображает сообщение о том, что файл уже существует.

Добавить результат в существующий файл

Если вы хотите добавить другой вывод в тот же файл, а также не хотите удалять или перезаписывать данные, добавьте параметр –Append перед именем файла, как показано в приведенной ниже команде.

Приведенная выше команда добавит вывод команды Ping в тот же текстовый файл, не перезаписывая его.

В этой статье я описал способ сохранения выходных данных команд PowerShell в файл. Вы можете сохранить вывод команд в текстовом файле, предотвратить его перезапись и добавить вывод другой команды в тот же файл.

Читайте также: