Использование команд форматирования для изменения представления выходных данных
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…
PowerShell