Использование команд Format для изменения представления выводаUsing Format Commands to Change Output View

Windows PowerShell содержит набор командлетов, позволяющих пользователю контролировать, какие свойства должны отображаться для определенных объектов.Windows PowerShell has a set of cmdlets that allow you to control which properties are displayed for particular objects. Имена всех этих командлетов начинаются глаголом Format.The names of all the cmdlets begin with the verb Format. Они позволяют выбрать для отображения одно или несколько свойств.They let you select one or more properties to show.

С глагола Format начинаются командлеты Format-Wide, Format-List, Format-Table и Format-Custom.The Format cmdlets are Format-Wide, Format-List, Format-Table, and Format-Custom. В этом руководстве пользователя рассматриваются только командлеты Format-Wide, Format-List и Format-Table.We will only describe the Format-Wide, Format-List, and Format-Table cmdlets in this user's guide.

Каждый командлет форматирования имеет свойства по умолчанию, которые используются, если не задается отображение каких-либо определенных свойств.Each format cmdlet has default properties that will be used if you do not specify specific properties to display. Для указания свойств, которые нужно отобразить, каждый командлет использует одно и то же имя параметра Property.Each cmdlet also uses the same parameter name, Property, to specify which properties you want to display. Так как командлет Format-Wide отображает только одно свойство, для его параметра Property задается только одно значение, но в качестве значений параметров свойств у командлетов Format-List и Format-Table задается список имен свойств.Because Format-Wide only shows a single property, its Property parameter only takes a single value, but the property parameters of Format-List and Format-Table will accept a list of property names.

Если команда Get-Process -Name powershell используется во время работы двух экземпляров Windows PowerShell, формируются следующие выходные данные:If you use the command Get-Process -Name powershell with two instances of Windows PowerShell running, you get output that looks like this:

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 для изменения способа отображения выходных данных команды.In the rest of this section, we will explore how to use Format cmdlets to change the way the output of this command is displayed.

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

По умолчанию командлет Format-Wide отображает только свойство по умолчанию для объекта.The Format-Wide cmdlet, by default, displays only the default property of an object. Данные, связанные с каждым объектом, отображаются в одном столбце:The information associated with each object is displayed in a single column:

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

powershell                              powershell

Можно также задать свойство, отличное от используемого по умолчанию:You can also specify a non-default property:

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

2760                                    3448

Настройка отображения командлета Format-Wide с помощью параметра ColumnControlling Format-Wide Display with Column

С помощью командлета Format-Wide одновременно можно отобразить только одно свойство.With the Format-Wide cmdlet, you can only display a single property at a time. Это может быть полезным при отображении простых списков, у которых в каждой строке отображается только один элемент.This makes it useful for displaying simple lists that show only one element per line. Для получения простого списка нужно установить для параметра Column значение 1, введя следующее:To get a simple listing, set the value of the Column parameter to 1 by typing:

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

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

Командлет Format-List показывает объект в виде списка, в котором каждое свойство имеет метку и отображается в отдельной строке:The Format-List cmdlet displays an object in the form of a listing, with each property labeled and displayed on a separate line:

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

Можно указать произвольное число свойств:You can specify as many properties as you want:

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-ListGetting Detailed Information by Using Format-List with Wildcards

Командлет Format-List позволяет использовать подстановочные знаки в качестве значения параметра Property.The Format-List cmdlet lets you use a wildcard as the value of its Property parameter. Это дает возможность отображать подробные сведения.This lets you display detailed information. Часто объекты содержат больше информации, чем необходимо. Поэтому Windows PowerShell по умолчанию выводит значения не всех свойств.Often, objects include more information than you need, which is why Windows PowerShell does not show all property values by default. Чтобы вывести список всех свойств объекта, используйте команду Format-List -Property *.To show all of properties of an object, use the Format-List -Property * command. Следующая команда формирует более 60 строк выходных данных для одного процесса:The following command generates over 60 lines of output for a single process:

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

Хотя команда Format-List и полезна для вывода подробных сведений, для получения сведений, содержащих много элементов, обычно удобнее использовать упрощенное табличное представление.Although the Format-List command is useful for showing detail, if you want an overview of output that includes many items, a simpler tabular view is often more useful.

Применение командлета Format-Table для табличного выводаUsing Format-Table for Tabular Output

Если использовать командлет Format-Table без указания имен свойств для форматирования вывода команды Get-Process, будут получены точно такие же выходные данные, что и без использования форматирования.If you use the Format-Table cmdlet with no property names specified to format the output of the Get-Process command, you get exactly the same output as you do without performing any formatting. Это вызвано тем, что процессы обычно показываются в виде таблицы, как и большинство объектов Windows PowerShell.The reason is that processes are usually displayed in a tabular format, as are most Windows PowerShell objects.

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)Improving Format-Table Output (AutoSize)

Хотя табличное представление и полезно при выводе большого количества сведений для сравнения, интерпретация данных может вызвать затруднения, если экран слишком узок и не вмещает все данные.Although a tabular view is useful for displaying a lot of comparable information, it may be difficult to interpret if the display is too narrow for the data. Например, если отобразить путь процесса, идентификатор, имя и организацию, данные в столбцах пути процесса и организации окажутся обрезанными:For example, if you try to display process path, ID, name, and company, you get truncated output for the process path and the company column:

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 вычислит ширину столбцов по ширине реально отображаемых данных.If you specify the AutoSize parameter when you run the Format-Table command, Windows PowerShell will calculate column widths based on the actual data you are going to display. Это улучшит внешний вид столбца Path, но значение столбца с названием организации останется обрезанным:This makes the Path column readable, but the company column remains truncated:

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 может обрезать данные, но это происходит только на правой границе экрана.The Format-Table cmdlet might still truncate data, but it will only do so at the end of the screen. Свойствам, за исключением последнего отображаемого, выделяется столько места, сколько нужно для корректного вывода самого длинного элемента данных.Properties, other than the last one displayed, are given as much size as they need for their longest data element to display correctly. Если поменять местами элементы Path и Company в списке значений Property, название организации отображается полностью, но путь обрезан:You can see that company name is visible but path is truncated if you swap the locations of Path and Company in the Property value list:

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 предполагает, что чем ближе свойство к началу списка свойств, тем оно важнее.The Format-Table command assumes that the nearer a property is to the beginning of the property list, the more important it is. В связи с этим предпринимается попытка отобразить полностью свойства, находящиеся ближе всего к началу.So it attempts to display the properties nearest the beginning completely. Если команда Format-Table не может отобразить все свойства, она удаляет некоторые столбцы из выходных данных и выдает предупреждение.If the Format-Table command cannot display all the properties, it will remove some columns from the display and provide a warning. Такое поведение можно наблюдать, если поместить свойство Name в конец списка:You can see this behavior if you make Name the last property in the list:

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

В приведенных выше входных данных столбец идентификатора обрезан, чтобы его значение уместилось в списке, а заголовки столбцов расположены вертикально.In the output above, the ID column is truncated to make it fit into the listing, and the column headings are stacked up. Автоматическое изменение размера столбцов не всегда дает желаемый результат.Automatically resizing the columns does not always do what you want.

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

Длинные данные командлета Format-Table можно принудительно перенести на следующую строку в пределах столбца с помощью параметра Wrap.You can force lengthy Format-Table data to wrap within its display column by using the Wrap parameter. Использование параметра Wrap в отдельности не всегда приводит к ожидаемому результату, так как если не указан еще и параметр AutoSize, применяются параметры по умолчанию:Using the Wrap parameter alone will not necessarily do what you expect, since it uses default settings if you do not also specify 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 без других параметров заключается в отсутствии существенного замедления обработки.An advantage of using the Wrap parameter by itself is that it does not slow down processing very much. Использование параметра AutoSize во время выполнения рекурсивного вывода списка файлов в большом каталоге может потребовать значительного объема памяти и времени перед отображением первых выходных данных.If you perform a recursive file listing of a large directory system, it might take a very long time and use a lot of memory before displaying the first output items if you use AutoSize.

Если загрузка системы не имеет решающего значения, параметр AutoSize хорошо работает в сочетании с параметром Wrap.If you are not concerned about system load, then AutoSize works well with the Wrap parameter. Начальным столбцам всегда выделяется необходимый размер для вывода элементов в одной строке, как и при указании параметра AutoSize без параметра Wrap.The initial columns are always allotted as much width as they need to display items on one line, just as when you specify AutoSize without the Wrap parameter. Единственное отличие состоит в том, что последний столбец будет при необходимости перенесен на следующую строку:The only difference is that the final column will be wrapped if necessary:

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

Некоторые столбцы могут не быть показаны, если первым указать самый широкий столбец, поэтому безопаснее указывать первыми самые маленькие элементы данных.Some columns might not be displayed if you specify the widest columns first, so it is safest to specify the smallest data elements first. В следующем примере первым указан чрезвычайно большой элемент — путь. Даже при переносе на следующую строку последний столбец Name теряется:In the following example, we specify the extremely wide path element first, and even with wrapping, we still lose the final Name column:

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)Organizing Table Output (-GroupBy)

Другим полезным параметром управления табличным выводом является GroupBy.Another useful parameter for tabular output control is GroupBy. Длинные табличные списки особенно тяжелы для сравнения.Longer tabular listings in particular may be hard to compare. Параметр GroupBy группирует выходные данные в соответствии со значением свойства.The GroupBy parameter groups output based on a property value. Например, можно сгруппировать процессы по организации для упрощения проверки, исключая название организации из списка свойства:For example, we can group processes by company for easier inspection, omitting the company value from the property listing:

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