Вывод в файл powershell: Как сохранить данные из командной строки или PowerShell

Содержание

Вывод данных в PowerShell

Обычно в процессе работы PowerShell генерируются некоторые выходные данные. Для вывода этих данных существуют специальные Out-командлеты (командлеты, название которых начинается с Out-). Когда выполняемая команда PowerShell возвращает данные, они передаются по конвейеру на вход Out-командлета, который обрабатывает их и отправляет в устройство вывода (на экран, в файл, на принтер и т.п.).

Для просмотра этих командлетов выполним команду:

Get-Command -Verb Out

 

 Out-Host

Командлет Out-Host служит для вывода данных на экран. Например:

Get-Process powershell | Out-Host

Впрочем, добавлять Out-Host в конец команды совсем необязательно. В конце конвейера по умолчанию находится командлет Out-Default, который и перенаправляет все в Out-Host. Т.е. предыдущая команда эквивалентна команде:

Get-Process powershell | Out-Default

которая в свою очередь эквивалентна команде:

Get-Process powershell

На самом деле механизм вывода еще запутаннее. Как вы помните, результатом работы PowerShell являются объекты. Out-командлеты не умеют работать с любыми объектами, а только со специальным типом объектов форматирования, поэтому при получении объекта вызывают один из командлетов форматирования (Format-*).  Format-командлет предоставляет Out-командлету объекты форматирования, описывающие порядок построения выходных данных, а Out-командлет отправляет их в нужное устройство. Т.е. при выполнении команды:

Get-Process powershell

в действительности отрабатывает команда:

Get-Process powershell | Format-Table | Out-Host

 

Хотя добавлять Out-Host в конец команды необязательно, но в некоторых случаях удобно. К примеру он имеет ключ Paging, с помощью которого можно организовать постраничный вывод:

Get-Process | Out-Host -Paging

Out-File

Командлет Out-File перенаправляет выходные данные в указанный файл, например:

Get-Process powershell | Out-File proc.txt

По умолчанию данные в файле перезаписываются. Запретить перезапись существующего файла можно, указав ключ NoClobber, а если необходимо дописывать данные в существующий файл, то можно использовать ключ Append, который добавляет данные в конец файла:

Get-Process powershell | Out-File proc.txt -Append

 

Для вывода в файл можно использовать сокращенный синтаксис. Например для записи:

Get-Process powershell >proc.txt

или для добавления в конец файла:

Get-Process powershell >>proc.txt

Out-GridView

Командлет Out-GridView выводит данные в виде графической таблицы, в которой их можно отфильтровать и отсортировать по нужному признаку. Для наглядности можно указать ключ Title, который будет отображаться в заголовке:

Get-Process | Out-GridView -Title processes

 

Начиная стретьей версии PowerShell Out-GridView поддерживает ключ PassThru, позволяющий передать полученные данные дальше по конвейеру. Например, можно вывести список процессов, в графической оснастке отобрать нужные и передать их командлету Stop-Process, который остановит выбранные процессы:

Get-Process | Out-GridView -PassThru | Stop-Process

Out-Null

Командлет Out-Null используется в том случае, если выходные данные отображать не нужно. Он отправляет полученные данные в устройство NULL, т.е. удаляет их. Для примера возьмем такую команду:

$process = Get-WmiObject win32_process -Filter ″Name = ′Notepad.exe′″
$process.Terminate()

Помимо основного действия (остановка процесса) она выводит много лишней информации. Чтобы избавится от нее, отправим вывод в Out-Null, например так:

$process.Terminate() | Out-Null

или так:

$process.Terminate() >$null

Out-String

Командлет Out-String преобразует входные данные в массив строк. По сути Out-String преобразует объекты PowerShell в строки, с которыми дальше можно работать как с обычным текстом (форматировать, производить поиск и т. п.).

Для примера выведем процесс, сохраним его в переменную $a и посмотрим тип данных:

$a = Get-Process powershell
$a.GetType()

Затем скормим содержимое Out-String а вывод сохраним в переменную $b:

$b = $a | Out-String
$b.Get-Type()

Как видно из примера, на входе Out-String тип данных Process, а на выходе String.

 

Out-String принципиально отличается от остальных out-командлетов. Поскольку обычные out-командлеты работают с конечным результатом предыдущих команд, то сами они не производят никаких выходных данных. Именно поэтому out-командлет обычно ставится последним в командной строке, ведь после него в конвейере не остается ничего, с чем могут работать другие командлеты.

В отличие от них Out-String принимает объекты, преобразует их в массив строк и передает дальше по конвейеру. По умолчанию данные накапливаются и возвращаются одной строкой, но с помощью ключа Stream можно указать вывод по отдельной строке для каждого объекта.

Для примера выведем список системных служб со всеми свойствами и отформатируем его в виде таблицы:

Get-Service | Format-Table -Property * -AutoSize

Поскольку ширина консоли граничена 80 символами, то большинство данных будет обрезано, что не очень здорово.

 

Чтобы не обрезать вывод, направим его в Out-String и увеличим ширину:

Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024

Теперь все данные попали на экран, но все равно выглядит не очень.

 

Исправим положение, передав вывод Out-String командлету Out-File:

Get-Service | Format-Table -Property * -AutoSize | Out-String -Width 1024 | Out-File service.txt

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

Out-Printer

Командлет Out-Printer перенаправляет вывод на принтер. Например:

Get-Service | Format-Table -Property * -AutoSize | Out-File service. txt -Width 1024
Get-Content service.txt | Out-Printer

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

Out-File (Microsoft.PowerShell.Utility) — PowerShell | Microsoft Learn

  • Ссылка
Модуль:
Microsoft.PowerShell.Utility

Отправляет выходные данные в файл.

Синтаксис

Out-File
   [-FilePath] <string>
   [[-Encoding] <Encoding>]
   [-Append]
   [-Force]
   [-NoClobber]
   [-Width <int>]
   [-NoNewline]
   [-InputObject <psobject>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]
Out-File
   [[-Encoding] <Encoding>]
   -LiteralPath <string>
   [-Append]
   [-Force]
   [-NoClobber]
   [-Width <int>]
   [-NoNewline]
   [-InputObject <psobject>]
   [-WhatIf]
   [-Confirm]
   [<CommonParameters>]

Описание

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

Примеры

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

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

Get-Process | Out-File -FilePath .\Process.txt
Get-Content -Path .\Process.txt
NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
     29    22.39      35.40      10.98   42764   9 Application
     53    99. 04     113.96       0.00   32664   0 CcmExec
     27    96.62     112.43     113.00   17720   9 Code

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

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

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

Get-Process | Out-File -FilePath .\Process.txt -NoClobber
Out-File : The file 'C:\Test\Process.txt' already exists.
At line:1 char:15
+ Get-Process | Out-File -FilePath .\Process.txt -NoClobber
+               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

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

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

$Procs = Get-Process
Out-File -FilePath .\Process.txt -InputObject $Procs -Encoding ASCII -Width 50

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

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

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

PS> Set-Location -Path Alias:
PS> Get-Location
Path
----
Alias:\
PS> Get-ChildItem | Out-File -FilePath C:\TestDir\AliasNames.txt
PS> Get-Content -Path C:\TestDir\AliasNames.txt
CommandType     Name
-----------     ----
Alias           % -> ForEach-Object
Alias           ? -> Where-Object
Alias           ac -> Add-Content
Alias           cat -> Get-Content

Команда Set-Location использует параметр Path , чтобы задать текущее расположение для поставщика Alias:реестра . Командлет 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.

function DemoDefaultOutFileWidth() {
    try {
        $PSDefaultParameterValues['out-file:width'] = 2000
        $logFile = "$pwd\logfile.txt"
        Get-ChildItem Env:\ > $logFile
        Get-Service -ErrorAction Ignore | Format-Table -AutoSize | Out-File $logFile -Append
        Get-Process | Format-Table Id,SI,Name,Path,MainWindowTitle >> $logFile
    }
    finally {
        $PSDefaultParameterValues.Remove('out-file:width')
    }
}
DemoDefaultOutFileWidth

Дополнительные сведения о $PSDefaultParameterValuesсм. в разделе about_Preference_Variables.

Параметры

-Append

-Confirm

-Encoding

-FilePath

-Force

-InputObject

-LiteralPath

-NoClobber

-NoNewline

-WhatIf

-Width

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

PSObject

В этот командлет можно передать любой объект.

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

None

Этот командлет не возвращает выходные данные.

Примечания

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

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

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

В PowerShell 7.2 добавлена возможность управления отображением escape-последовательностей ANSI. Выходные данные ANSI, передаваемые в Out-File , можно изменить в зависимости от $PSStyle.OutputRendering настройки свойства . Дополнительные сведения см . в разделе about_ANSI_Terminals.

  • about_Providers
  • about_Quoting_Rules
  • Out-Default;
  • Out-Host
  • Out-Null
  • Out-String
  • Tee-Object

Как выполнить вывод в файл с помощью PowerShell Out-File — LazyAdmin

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

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

В этой статье

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

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

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

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

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

Параметр Описание
-FILEPATH Установить местоположение и название файла
-Append. Принудительно Перезаписать файл только для чтения
-NoClobber Предотвратить перезапись файла
-NoNewLine Символ новой строки не будет записан.
-Width Ограничение количества символов на каждой строке (по умолчанию 80)
-Whatif Запуск в режиме тестового режима

Suppile Cmdlet Parameters

Powerhemherh -Opmersher 9008 4008.

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

When using the redirect operator we can specify which stream we want to export:

4>

043 Verbose only

Operator Description / Stream Write cmdlet
> Success only Write-Output
2> Только ошибка Ошибка записи
3> Только предупреждение Предупреждение записи
Write-Verbose
5> Debug only Write-Debug
6> Information only Write-Information
*> All

Оператор перенаправления PowerShell

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

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

 Get-Process -Name explorer | Out-File -FilePath c:\temp\process.txt
# Такой же как:
Get-Process -Имя проводника > c:\temp\process.txt
# Результаты
 Get-Content C:\temp\process.txt
 NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
 ------ ----- ----- ------ -- -- -----------
    132 94,56 158,22 131,45 123364 1 исследователь
PS С:\> 

Как видите, результаты выполнения командлета Get-Process хранятся в файле process.txt:

Powershell Output to File

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

 Get-Process -Name explorer | Out-File c:\temp\process.txt -NoClobber 

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

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

Не перезаписывать существующие файлы

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

 $exportPath = "C:\temp\process. txt"
Если (тестовый путь $exportPath) {
    # Показать предупреждение или изменить имя файла здесь
    Пишет-Предупреждение "Файл уже существует"
    $exportPath = "C:\temp\process-1.txt" # создайте что-нибудь красивое с указанием даты или времени
}еще{
    Проводник Get-Process -Name | Выходной файл $exportPath -NoClobber
} 

PowerShell Добавить в файл

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

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

 # Добавление с помощью командлета Out-File
'Яблоко' | Out-File -FilePath C:\temp\fruits. txt -Append
Get-Content -Путь c:\temp\fruits.txt
# Результат
Яблоко
# Добавляем оператор перенаправления
'Груша' >> C:\temp\fruits.txt
Get-Content -Путь c:\temp\fruits.txt
# Результат
Яблоко
Груша 

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

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

 # Обратите внимание, что вам также нужно будет указать NoNewLine для первой записи
'Черника;' | Out-File -FilePath C:\temp\fruits.txt -NoNewline
# Добавляем больше ягод
'Клубника;' | Out-File -FilePath C:\temp\fruits. txt -Append -NoNewline
'Ежевика;' | Out-File -FilePath C:\temp\fruits.txt -Append -NoNewline
'Малина;' | Out-File -FilePath C:\temp\fruits.txt -Append -NoNewline
'Клюква;' | Out-File -FilePath C:\temp\fruits.txt -Append -NoNewline 

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

Добавить в файл без новой строки

Использование PowerShell Add-Content

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

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

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

 Add-Content -Path c:\temp\file. txt -Value «Новая строка для добавления» 

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

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

 Add-Content -Path C:\temp\files\*.txt -Value (Get-Date) -Exclude "readme*" 

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

PowerShell Add-Content

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

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

 Add-Content -Path C:\temp\files\* -Value (Get-Date) -Фильтр "*лог*" 

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

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

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

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

 Функция Get-ProcessCpu {
    параметр(
        [Параметр(обязательный = $true)]$имя
    )
    Get-Process -Name $имя | выберите процессор
}
Get-ProcessCpu -name "explorer2" | Исходящий файл C:\temp\process.txt 

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

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

 # Записать все результаты в файл:
Get-ProcessCpu -name "explorer2" *> C:\temp\process. txt
# Записать в файл только ошибку:
Get-ProcessCpu -name "explorer2" 2> C:\temp\process-error-log.txt
# Записывать в файл только предупреждения:
Get-ProcessCpu -name "explorer2" 3> C:\temp\process-error-log.txt 

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

Powershell Write to Log File

Powershell Write to Log File

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

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

 Функция Get-ProcessCpu {
    параметр(
        [Параметр(обязательный = $true)]$имя
    )
    Get-Process -Name $имя | выберите процессор
}
# Записывать в лог-файл только ошибки
Get-ProcessCpu -name "explorer2" 2>> "C:\temp\files\$env:имя_компьютера-process. log" 

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

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

 # Установить путь к файлу журнала
$logFile = "C:\temp\files\$env:имя_компьютера-процесс.log"
Функция записи в журнал {
    параметр(
        [Параметр(обязательный = $true)][строка] $сообщение,
        [Параметр (обязательный = $false)]
        [ValidateSet("ИНФО","ПРЕДУПРЕЖДЕНИЕ","ОШИБКА")]
        [строка] $level = "ИНФОРМАЦИЯ"
    )
    # Создать временную метку
    $timestamp = (Get-Date). toString("гггг/мм/дд ЧЧ:мм:сс")
    # Добавляем содержимое в лог-файл
    Add-Content -Path $logFile -Value "$timestamp [$level] - $message"
}
ОШИБКА уровня записи в журнале - сообщение "Строка не может быть строкой" 

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

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

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

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

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

Если у вас есть какие-либо вопросы, просто оставьте комментарий ниже.

Out-File (Microsoft.PowerShell.Utility) — PowerShell | Microsoft Learn

  • Ссылка
Модуль:
Microsoft. PowerShell.Утилита

Отправляет вывод в файл.

Синтаксис

 Вне файла
   [-FilePath] <строка>
   [[-Кодировка] <Кодировка>]
   [-Добавить]
   [-Сила]
   [-NoClobber]
   [-Ширина <число>]
   [-NoNewline]
   [-InputObject ]
   [-Что, если]
   [-Подтверждать]
   [<Общие параметры>] 
 Вне файла
   [[-Кодировка] <Кодировка>]
   -LiteralPath <строка>
   [-Добавить]
   [-Сила]
   [-NoClobber]
   [-Ширина <число>]
   [-NoNewline]
   [-InputObject ]
   [-Что, если]
   [-Подтверждать]
   [] 

Описание

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

Примеры

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

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

 Процесс получения | Out-File -FilePath .\Process.txt
Get-Content -Путь .\Process.txt
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName
 ------ ----- ----- ------ -- -- -----------
     2922,39 35,40 10,98 42764 9 Применение
     53 99,04 113,96 0,00 32664 0 CcmExec
     27 96.62 112.43 113.00 17720 9 Код 

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

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

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

 Процесс получения | Out-File -FilePath .\Process.txt -NoClobber
Out-File: файл «C:\Test\Process.txt» уже существует.
В строке:1 символ:15
+ Получить-Процесс | Out-File -FilePath .\Process.txt -NoClobber
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

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

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

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

 $Procs = Get-Process
Out-File -FilePath .\Process.txt -InputObject $Procs -Encoding ASCII -Width 50 

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

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

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

 PS> Set-Location-Псевдоним пути:
PS> Получить-местоположение
Путь
----
Псевдоним:\
PS> Получить-ChildItem | Out-File - FilePath C:\TestDir\AliasNames.txt
PS> Get-Content -Path C:\TestDir\AliasNames.txt
Имя типа команды
----------- ----
Псевдоним % -> ForEach-Object
Псевдоним? -> Где-Объект
Псевдоним ac -> Добавить контент
Псевдоним cat -> Get-Content 

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

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

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

 функция DemoDefaultOutFileWidth() {
    пытаться {
        $PSDefaultParameterValues['out-file:width'] = 2000
        $logFile = "$pwd\logfile.txt"
        Get-ChildItem Env:\ > $logFile
        Get-Service -ErrorAction Игнорировать | Формат-Таблица-Авторазмер | Выходной файл $logFile -Append
        Get-процесс | Идентификатор таблицы форматов, SI, имя, путь, MainWindowTitle >> $logFile
    }
    окончательно {
        $PSDefaultParameterValues. Remove('out-file:width')
    }
}
DemoDefaultOutFileWidth 

Дополнительные сведения о $PSDefaultParameterValues ​​ , см.
about_Preference_Variables.

Parameters

-Append

-Confirm

-Encoding

-FilePath

-Force

-InputObject

-LiteralPath

-NoClobber

-NoNewline

-WhatIf

-Width

Inputs

PSObject

Вы можете передать любой объект этому командлету.

Выходы

Нет

Этот командлет не возвращает никаких результатов.

Примечания

Объекты ввода автоматически форматируются так же, как в терминале, но вы можете использовать
Format-* Командлет для явного управления форматированием вывода в файл. Например,
Дата получения | Список форматов | Out-File out.txt

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