Использование команд форматирования для изменения представления выходных данных

PowerShell предоставляет набор командлетов, которые позволяют контролировать, какие свойства должны отображаться для определенных объектов. Имена всех этих командлетов начинаются глаголом Format. Они позволяют выбрать, какие свойства будут отображаться.

Get-Command -Verb Format -Module Microsoft.PowerShell.Utility
CommandType     Name               Version    Source
-----------     ----               -------    ------
Cmdlet          Format-Custom      6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Hex         6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-List        6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Table       6.1.0.0    Microsoft.PowerShell.Utility
Cmdlet          Format-Wide        6.1.0.0    Microsoft.PowerShell.Utility

В этой статье описываются командлеты Format-Wide, Format-List и Format-Table.

Каждый тип объекта в PowerShell имеет свойства по умолчанию, используемые при выборе свойств для отображения. Каждый командлет использует один и тот же параметр свойства , чтобы указать, какие свойства вы хотите отобразить. Так как Format-Wide отображает только одно свойство, в параметре Property он принимает только одно значение, тогда как Format-List и Format-Table поддерживают списки с именами свойств.

В этом примере выходные данные командлета Get-Process по умолчанию показывают, что у нас есть два экземпляра Обозреватель в Интернете.

Get-Process -Name iexplore

Для объектов Process по умолчанию применяется формат со следующими свойствами.

 NPM(K)    PM(M)      WS(M)     CPU(s)      Id  SI ProcessName
 ------    -----      -----     ------      --  -- -----------
     32    25.52      10.25      13.11   12808   1 iexplore
     52    11.46      26.46       3.55   21748   1 iexplore

Использование format-Wide для выходных данных с одним элементом

По умолчанию командлет Format-Wide отображает только свойство по умолчанию для объекта. Данные, связанные с каждым объектом, отображаются в одном столбце:

Get-Command -Verb Format | Format-Wide
Format-Custom          Format-Hex
Format-List            Format-Table
Format-Wide

Можно также задать свойство, отличное от используемого по умолчанию:

Get-Command -Verb Format | Format-Wide -Property Noun
Custom                 Hex
List                   Table
Wide

Управление отображением на уровне формата с помощью столбца

С помощью командлета Format-Wide одновременно можно отобразить только одно свойство. Это удобно для отображения больших списков в нескольких столбцах.

Get-Command -Verb Format | Format-Wide -Property Noun -Column 3
Custom                 Hex                  List
Table                  Wide

Использование format-List для представления списка

Командлет Format-List показывает объект в виде списка, в котором каждое свойство снабжено меткой и отображается в отдельной строке:

Get-Process -Name iexplore | Format-List
Id      : 12808
Handles : 578
CPU     : 13.140625
SI      : 1
Name    : iexplore

Id      : 21748
Handles : 641
CPU     : 3.59375
SI      : 1
Name    : iexplore

Можно указать произвольное число свойств:

Get-Process -Name iexplore | Format-List -Property ProcessName,FileVersion,StartTime,Id
ProcessName : iexplore
FileVersion : 11.00.18362.1 (WinBuild.160101.0800)
StartTime   : 10/22/2019 11:23:58 AM
Id          : 12808

ProcessName : iexplore
FileVersion : 11.00.18362.1 (WinBuild.160101.0800)
StartTime   : 10/22/2019 11:23:57 AM
Id          : 21748

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

Командлет Format-List позволяет использовать подстановочные знаки в качестве значения параметра Property. Это дает возможность отображать подробные сведения. Часто объекты содержат больше информации, чем необходимо. Поэтому PowerShell по умолчанию выводит значения не всех свойств. Чтобы отобразить все свойства объекта, используйте Format-List -Property * команду. Следующая команда создает более 60 строк выходных данных для одного процесса:

Get-Process -Name iexplore | Format-List -Property *

Команда Format-List полезна для вывода подробных сведений, но для получения сведений с большим числом элементов обычно удобнее использовать упрощенное табличное представление.

Использование таблицы format-Table для табличных выходных данных

Если вызвать командлет Format-Table без указания имен свойств для форматирования вывода команды Get-Process, вы получите такие же выходные данные, как и без командлета Format. По умолчанию PowerShell отображает объекты Process в табличном формате.

Get-Service -Name win* | Format-Table
Status   Name               DisplayName
------   ----               -----------
Running  WinDefend          Windows Defender Antivirus Service
Running  WinHttpAutoProx... WinHTTP Web Proxy Auto-Discovery Se...
Running  Winmgmt            Windows Management Instrumentation
Running  WinRM              Windows Remote Management (WS-Manag...

Примечание.

Get-Service доступен только на платформах Windows.

Улучшение выходных данных format-Table

Хотя табличное представление и полезно при выводе большого количества сведений, интерпретация данных может вызвать затруднения, если экран слишком узок и не вмещает все данные. В предыдущем примере выходные данные усекаются. Если указать параметр AutoSize при выполнении команды Format-Table, PowerShell вычислит ширину столбцов на основе размера отображаемых данных. Это повышает удобство чтения столбцов.

Get-Service -Name win* | Format-Table -AutoSize
Status  Name                DisplayName
------  ----                -----------
Running WinDefend           Windows Defender Antivirus Service
Running WinHttpAutoProxySvc WinHTTP Web Proxy Auto-Discovery Service
Running Winmgmt             Windows Management Instrumentation
Running WinRM               Windows Remote Management (WS-Management)

Командлет Format-Table и в этом случае может усекать данные, но теперь только на правой границе экрана. Свойствам, за исключением последнего отображаемого, выделяется столько места, сколько нужно для корректного вывода самого длинного элемента данных.

Get-Service -Name win* |
    Format-Table -Property Name, Status, StartType, DisplayName, DependentServices -AutoSize
Name                 Status StartType DisplayName                               DependentServi
                                                                                ces
----                 ------ --------- -----------                               --------------
WinDefend           Running Automatic Windows Defender Antivirus Service        {}
WinHttpAutoProxySvc Running    Manual WinHTTP Web Proxy Auto-Discovery Service  {NcaSvc, iphl…
Winmgmt             Running Automatic Windows Management Instrumentation        {vmms, TPHKLO…
WinRM               Running Automatic Windows Remote Management (WS-Management) {}

Команда Format-Table предполагает, что свойства перечислены в порядке важности. Командлет пытается полностью отобразить свойства, ближайшие к началу. Если команда Format-Table не может отобразить все свойства, она удаляет из представления некоторые столбцы. Это поведение можно увидеть в предыдущем примере для свойства DependentServices.

Упаковка выходных данных format-Table в столбцах

Вы можете принудительно заставить длинные Format-Table данные упаковывать в его отображаемый столбец с помощью параметра Wrap . Использование параметра Wrap не всегда приводит к ожидаемому результату, так как без параметра AutoSize он применяет параметры по умолчанию:

Get-Service -Name win* |
    Format-Table -Property Name, Status, StartType, DisplayName, DependentServices -Wrap
Name                 Status StartType DisplayName                               DependentServi
                                                                                ces
----                 ------ --------- -----------                               --------------
WinDefend           Running Automatic Windows Defender Antivirus Service        {}
WinHttpAutoProxySvc Running    Manual WinHTTP Web Proxy Auto-Discovery Service  {NcaSvc,
                                                                                iphlpsvc}
Winmgmt             Running Automatic Windows Management Instrumentation        {vmms,
                                                                                TPHKLOAD,
                                                                                SUService,
                                                                                smstsmgr…}
WinRM               Running Automatic Windows Remote Management (WS-Management) {}

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

Если загрузка системы для вашего сценария не критична, параметр AutoSize хорошо сочетается с параметром Wrap. В этом случае ширина первых столбцов также позволяет выводить элементы в одной строке, а последний столбец при необходимости разбивается на несколько строк.

Примечание.

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

В следующем примере первыми указаны наибольшие по размеру свойства.

Get-Process -Name iexplore |
    Format-Table -Wrap -AutoSize -Property FileVersion, Path, Name, Id

Даже при использовании переноса строк столбец Id пришлось исключить:

FileVersion                          Path                                                  Nam
                                                                                           e
-----------                          ----                                                  ---
11.00.18362.1 (WinBuild.160101.0800) C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE iex
                                                                                           plo
                                                                                           re
11.00.18362.1 (WinBuild.160101.0800) C:\Program Files\Internet Explorer\iexplore.exe       iex
                                                                                           plo
                                                                                           re

Упорядочение выходных данных таблицы

Другим полезным параметром управления табличным выводом является GroupBy. Длинные табличные списки особенно тяжелы для сравнения. Параметр GroupBy группирует выходные данные в соответствии со значением свойства. Например, можно сгруппировать службы по параметру StartType, чтобы упростить проверку, но исключить значение StartType из списка отображаемых свойств:

Get-Service -Name win* | Sort-Object StartType | Format-Table -GroupBy StartType
   StartType: Automatic
Status   Name               DisplayName
------   ----               -----------
Running  WinDefend          Windows Defender Antivirus Service
Running  Winmgmt            Windows Management Instrumentation
Running  WinRM              Windows Remote Management (WS-Managem…

   StartType: Manual
Status   Name               DisplayName
------   ----               -----------
Running  WinHttpAutoProxyS… WinHTTP Web Proxy Auto-Discovery Serv…