Перенаправление выходных данных
PowerShell предоставляет несколько командлетов, которые позволяют управлять выходными данными напрямую. Эти командлеты обладают двумя важными характеристиками.
Во-первых, в общем случае они преобразуют данные в некоторую форму текста. Это вызвано тем, что они выводят данные в системные компоненты, принимающие текстовые входные данные. Поэтому они должны представлять объекты в виде текста. Поэтому текст отформатирован, как он отображается в окне консоли PowerShell.
Во-вторых, эти командлеты используют команду PowerShell Out , так как они отправляют информацию из PowerShell в другое место.
Вывод на консоль
По умолчанию PowerShell отправляет данные в окно узла, что именно Out-Host
делает командлет. Основная функция командлета Out-Host
— разбиение на страницы. Например, следующая команда использует Out-Host
для разбиения выходных данных командлета Get-Command
на страницы:
Get-Command | Out-Host -Paging
Окно узла находится за пределами PowerShell. Это важно, так как при отправке данных из PowerShell он фактически удаляется. Это можно увидеть, если попытаться создать конвейер, выводящий страницы данных в основное окно, а затем попробовать отформатировать их в виде списка, как показано ниже:
Get-Process | Out-Host -Paging | Format-List
Можно ожидать, что команда отобразит страницы сведений о процессах в формате списка. Вместо этого она отображает табличный список по умолчанию:
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
101 5 1076 3316 32 0.05 2888 alg
...
618 18 39348 51108 143 211.20 740 explorer
257 8 9752 16828 79 3.02 2560 explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Командлет Out-Host
отправляет данные непосредственно в консоль, поэтому команда Format-List
не получает ничего для форматирования.
Правильный способ использования этой команды заключается в том, чтобы поместить командлет Out-Host
в конце конвейера, как показано ниже. В результате перед разбиением на страницы и отображением данные процессов форматируются в виде списка.
Get-Process | Format-List | Out-Host -Paging
Id : 2888
Handles : 101
CPU : 0.046875
Name : alg
...
Id : 740
Handles : 612
CPU : 211.703125
Name : explorer
Id : 2560
Handles : 257
CPU : 3.015625
Name : explorer
...
<SPACE> next page; <CR> next line; Q quit
...
Это касается всех командлетов Out. Командлет Out должен всегда находиться в конце конвейера.
Примечание.
Все командлеты Out отображают выходные данные в виде текста, используя при этом действующее в окне консоли форматирование, включая ограничения длины строки.
Вывод карта
Командлет Out-Null
предназначен для немедленного удаления всех получаемых входных данных. Это удобно для удаления посторонних данных, получаемых при выполнении команды. При вводе следующей команды вы не получите ничего обратно из команды:
Get-Command | Out-Null
Командлет Out-Null
не выводит выходные данные ошибок карта. Например, если ввести следующую команду, отображается сообщение, информирующее вас о том, что PowerShell не распознает Is-NotACommand
следующее:
PS> Get-Command Is-NotACommand | Out-Null
Get-Command : 'Is-NotACommand' isn't recognized as a cmdlet, function, operable program, or script file.
At line:1 char:12
+ Get-Command <<<< Is-NotACommand | Out-Null
Печать данных
Out-Printer
доступен только на платформах Windows.
Данные можно распечатать с помощью командлета Out-Printer
. Командлет Out-Printer
использует принтер по умолчанию, если не указать имя принтера. Можно использовать любой принтер, совместимый с Windows, указав его отображаемое имя. Сопоставление портов и даже наличие физического принтера при этом не требуется.
Например, при наличии установленных средств Microsoft Office Document Imaging можно отправить данные в файл образа, введя следующее:
Get-Command -Name Get-* | Out-Printer -Name 'Microsoft Office Document Image Writer'
Сохранение данных
Выходные данные можно отправлять в файл вместо окна консоли с помощью командлета Out-File
. Следующая команда отправляет список процессов в файл C:\temp\processlist.txt
:
Get-Process | Out-File -FilePath C:\temp\processlist.txt
Результаты использования командлета Out-File
могут отличаться от ожидаемых, если вы привыкли к стандартному перенаправлению выходных данных. Чтобы понять поведение командлета Out-File
, необходимо помнить о контексте его выполнения.
В окне PowerShell 5.1 Out-File
командлет создает файл Юникода. Некоторые средства, ожидающие файлы ASCII, не работают правильно с форматом выходных данных по умолчанию. Формат выходных данных по умолчанию можно изменить на ASCII с помощью параметра кодировки :
Get-Process | Out-File -FilePath C:\temp\processlist.txt -Encoding ASCII
Out-file
форматирует содержимое файлов, чтобы оно было похоже на выходные данные консоли. Это приводит к усечению выходных данных так же, как в окне консоли в большинстве случаев. Например, если выполнить следующую команду:
Get-Command | Out-File -FilePath c:\temp\output.txt
Выходные данные будут выглядеть следующим образом:
CommandType Name Definition
----------- ---- ----------
Cmdlet Add-Content Add-Content [-Path] <String[...
Cmdlet Add-History Add-History [[-InputObject] ...
...
Чтобы получить выходные данные, которые не принудительно переносить линии, чтобы соответствовать ширине экрана, можно использовать параметр Width для указания ширины линии. Так как параметр Width — это 32-разрядное целое число, его максимальное значение равно 2147483647. Введите следующую команду, чтобы установить ширину строки в максимальное значение:
Get-Command | Out-File -FilePath c:\temp\output.txt -Width 2147483647
Командлет Out-File
наиболее полезен, если требуется сохранить выходные данные в том виде, в котором они отображались бы на консоли.
PowerShell