Вывод в файл 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:
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
, используйте конвейер.