Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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, вы можете отправить данные в файл изображения, введя следующее:
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 для указания ширины строки. Так как ширина является 32-разрядным целым параметром, максимальное значение, которое может иметь, равно 2147483647. Введите следующее значение, чтобы задать ширину строки таким максимальным значением:
Get-Command | Out-File -FilePath C:\temp\output.txt -Width 2147483647
Командлет Out-File
наиболее полезен, когда вы хотите сохранить выходные данные в том виде, в котором они отображаются на консоли.
PowerShell