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

С глагола Format начинаются командлеты Format-Wide, Format-List, Format-Table и Format-Custom. В этом руководстве пользователя будут описаны только командлеты Format-Wide, Format-List и Format-Table.

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

Если команда Get-Process -Name powershell используется во время работы двух экземпляров Windows PowerShell, в результате формируются выводимые данные, выглядящие следующим образом:

Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	 Id ProcessName
-------  ------	-----	----- -----   ------	 -- -----------
	995	 9	30308	27996   152	 2.73   2760 powershell
	331	 9	23284	29084   143	 1.06   3448 powershell

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

Применение командлета Format-Wide для вывода с одним элементом

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

PS> Get-Process -Name powershell | Format-Wide

powershell							powershell

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

PS> Get-Process -Name powershell | Format-Wide -Property Id

2760									3448

Настройка отображения командлета Format-Wide в столбец

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

Get-Command Format-Wide -Property Name -Column 1

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

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

PS> Get-Process -Name powershell | Format-List

Id	: 2760
Handles : 1242
CPU	 : 3.03125
Name	: powershell

Id	: 3448
Handles : 328
CPU	 : 1.0625
Name	: powershell

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

PS> Get-Process -Name powershell | Format-List -Property ProcessName,FileVersion
,StartTime,Id


ProcessName : powershell
FileVersion : 1.0.9567.1
StartTime   : 2006-05-24 13:42:00
Id		: 2760

ProcessName : powershell
FileVersion : 1.0.9567.1
StartTime   : 2006-05-24 13:54:28
Id		: 3448

Получение подробных сведений при помощи подстановочных знаков в командлете Format-List

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

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

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

Применение командлета Format-Table для вывода табличного представления

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

PS> Get-Process -Name powershell | Format-Table

Handles  NPM(K)	PM(K)	WS(K) VM(M)   CPU(s)	 Id ProcessName
-------  ------	-----	----- -----   ------	 -- -----------
   1488	 9	31568	29460   152	 3.53   2760 powershell
	332	 9	23140		632   141	 1.06   3448 powershell

Улучшение вывода командлета Format-Table (параметр AutoSize)

Хотя табличное представление и полезно при выводе большого количества сведений для сравнения, интерпретация данных может вызвать затруднения, если экран слишком узок и не вмещает все данные. Например, если показать путь процесса, идентификатор, имя и компанию, данные в столбцах пути процесса и компании окажутся обрезанными:

PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company

Path				Name								 Id Company
----				----								 -- -------
C:\Program Files... powershell						 2836 Microsoft Corpor...

Если указать параметр AutoSize при выполнении команды Format-Table, Windows PowerShell вычислит ширину столбцов по ширине реально отображаемых данных. Это улучшит внешний вид столбца Path, но значение столбца с названием компании останется обрезанным:

PS> Get-Process -Name powershell | Format-Table -Property Path,Name,Id,Company -
AutoSize

Path													Name		 Id Company
----													----		 -- -------
C:\Program Files\Windows PowerShell\v1.0\powershell.exe powershell 2836 Micr...

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

PS> Get-Process -Name powershell | Format-Table -Property Company,Name,Id,Path -
AutoSize

Company			 Name		 Id Path
-------			 ----		 -- ----
Microsoft Corporation powershell 2836 C:\Program Files\Windows PowerShell\v1...

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

PS> Get-Process -Name powershell | Format-Table -Property Company,Path,Id,Name -
AutoSize

WARNING: column "Name" does not fit into the display and was removed.

Company			 Path													I
																			d
-------			 ----													-
Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\powershell.exe 6

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

Перенос на следующую строку вывода командлета Format-Table в столбцах (параметр Wrap)

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

PS> Get-Process -Name powershell | Format-Table -Wrap -Property Name,Id,Company,
Path

Name								 Id Company			 Path
----								 -- -------			 ----
powershell						 2836 Microsoft Corporati C:\Program Files\Wi
										on				ndows PowerShell\v1
															.0\powershell.exe 

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

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

PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I
d,Company,Path

Name		 Id Company			 Path
----		 -- -------			 ----
powershell 2836 Microsoft Corporation C:\Program Files\Windows PowerShell\v1.0\
									powershell.exe

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

 PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Path,I
d,Company,Name

WARNING: column "Name" does not fit into the display and was removed.

Path													Id Company
----													-- -------
C:\Program Files\Windows PowerShell\v1.0\powershell.exe 2836 Microsoft Corporat
															 ion

Организация табличного вывода (параметр -GroupBy)

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

PS> Get-Process -Name powershell | Format-Table -Wrap -AutoSize -Property Name,I
d,Path -GroupBy Company


   Company: Microsoft Corporation

Name		 Id Path
----		 -- ----
powershell 1956 C:\Program Files\Windows PowerShell\v1.0\powershell.exe
powershell 2656 C:\Program Files\Windows PowerShell\v1.0\powershell.exe