Тонкая настройка вывода с Format-Table


Командлет Format-Table для вывода данных в виде таблицы

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

По умолчанию многие командлеты выводят данные оформленные в виде таблицы. В этом случае перенаправление вывода в Format-Table ничего не меняет.

Например, этот командлет выведет содержимое текущей папки:

Get-ChildItem

И следующие набор команд также выведет содержимое текущей папки, при этом данные будут идентичными, в том числе по оформлению:

Get-ChildItem | Format-Table

Но Format-Table не является бесполезным командлетом, поскольку с помощью его опций можно:

1. Изменять набор выводимых данных

2. Изменять внешний вид выводимых данных

Подробности смотрите в статьях:

Опции Format-Table

-AutoSize

Указывает, что командлет регулирует размер столбца и количество столбцов в зависимости от ширины данных. По умолчанию размер и количество столбцов определяются используемым шаблоном (так называемый «вид», view). Таблица, выведенная с использованием параметра -AutoSize может быть более компактной за счёт уменьшения пространства между столбцами.

-DisplayError False|True

Указывает, что командлет отображает ошибки в командной строке. Этот параметр можно использовать в качестве вспомогательного средства отладки, когда вы форматируете выражения в команде Format-Table и вам необходимо устранить неполадки с выражениями.


-Force

Указывает, что командлет предписывает командлету отображать всю информацию об ошибках. Используйте с параметром -DisplayError или -ShowError. По умолчанию, когда объект ошибки записывается в потоки ошибок или отображения, отображается только некоторая информация об ошибках.

-GroupBy <Object>

Задаёт отсортированный вывод в отдельных таблицах на основе значения свойства. Например, вы можете использовать -GroupBy для перечисления служб в отдельных таблицах в зависимости от их статуса.

Введите выражение или свойство. Параметр -GroupBy предполагает, что объекты отсортированы. Используйте командлет Sort-Object перед использованием Format-Table для группировки объектов.

Значение параметра -GroupBy может быть новым вычисляемым свойством. Чтобы создать вычисляемое свойство, используйте хеш-таблицу. Допустимые ключи следующие:

  • Name (или Label) - `<строка>`
  • Expression - `<строка>` или `<блок скрипта>`
  • FormatString - `<строка>`

-HideTableHeaders

Пропускает заголовки столбцов из таблицы.

Подробности смотрите в заметке: Как в PowerShell в выводимой таблице убрать шапку и оставить только данные

-InputObject

Указывает объекты для форматирования. Введите переменную, содержащую объекты, или введите команду или выражение для получения объектов.

Чтобы понять принцип работы этого параметра, посмотрите на следующую команду:

Get-Process notepad | Format-Table @{Label="Процесс"; Expression={$_.ProcessName}}, @{Label="Время работы"; Expression={(Get-Date) - $_.StartTime}}

и на идентичную предыдущей эту команду:

Format-Table -InputObject (Get-Process notepad) @{Label="Процесс"; Expression={$_.ProcessName}}, @{Label="Время работы"; Expression={(Get-Date) - $_.StartTime}}

-Property <Object[]>

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

Если вы опустите этот параметр, свойства, отображаемые на дисплее, будут зависеть от свойств первого объекта. Например, если у первого объекта есть PropertyA и PropertyB, а у последующих объектов есть PropertyA , PropertyB и PropertyC , то будут отображаться только заголовки PropertyA и PropertyB.

Параметр -Property является необязательным. Вы не можете использовать параметры -Property и -View в одной и той же команде.

Значение параметра -Property может быть новым вычисляемым свойством. Чтобы создать вычисляемое свойство, используйте хеш-таблицу. Допустимые следующие ключи:

  • Name (или Label) = `<строка>`
  • Expression = `<строка>` или `<скриптовый блок>`
  • FormatString = `<строка>`
  • Width = `<int32>`
  • Alignment = значением может быть Left, Center или Right

-RepeatHeader

Повторяет отображение заголовка таблицы после каждого заполнения экрана. Повторяющийся заголовок полезен, когда вывод направляется на программу, разделяющую вывод на страницы, такие как «less» или «more», или пейджинг с помощью программы чтения с экрана.

-ShowError

Этот параметр отправляет ошибки через конвейер. Этот параметр можно использовать в качестве средства отладки, когда вы форматируете выражения в команде Format-Table и вам необходимо устранить неполадки с выражениями.

-Wrap

Отображает текст, превышающий ширину столбца, на следующей строке. По умолчанию текст, превышающий ширину столбца, обрезается.

Примеры использования Format-Table

Пример 1: Подстройка размера таблицы под выводимые данные.

В этом примере в виде таблицы отображаются сведения о хост программе для PowerShell.

Get-Host | Format-Table -AutoSize


Командлет Get-Host получает объекты System.Management.Automation.Internal.Host.InternalHost, представляющие хост. Объекты передаются по конвейеру в Format-Table и отображаются в таблице. Параметр -AutoSize регулирует ширину столбцов, чтобы свести к минимуму усечение.

Пример 2: Форматирование процессов по BasePriority

В этом примере процессы отображаются в группах с одинаковым свойством BasePriority.

Get-Process | Sort-Object -Property BasePriority | Format-Table -GroupBy BasePriority -Wrap

Командлет Get-Process получает объекты, представляющие каждый процесс на компьютере, и отправляет их по конвейеру в Sort-Object. Объекты сортируются в порядке их свойства BasePriority.

Отсортированные объекты отправляются по конвейеру в Format-Table. Параметр -GroupBy упорядочивает данные процесса в группы на основе значения их свойства BasePriority. Параметр -Wrap гарантирует, что данные не будут усечены.

Пример 3: Форматирование процессов по дате запуска

В этом примере отображается информация о процессах, запущенных на компьютере. Объекты сортируются, и Format-Table использует представление для группировки объектов по дате их запуска.


Get-Process | Sort-Object StartTime | Format-Table -View StartTime

Командлет Get-Process получает объекты System.Diagnostics.Process, представляющие процессы, запущенные на компьютере. Объекты отправляются по конвейеру в Sort-Object и сортируются на основе свойства StartTime.

Отсортированные объекты отправляются по конвейеру в Format-Table. Параметр -View указывает представление StartTime, определённое в файле PowerShell DotNetTypes.format.ps1xml для объектов System.Diagnostics.Process. Представление StartTime преобразует время начала каждого процесса в короткую дату, а затем группирует процессы по дате начала.

Файл DotNetTypes.format.ps1xml содержит представление Priority для процессов. Вы можете создавать свои собственные файлы format.ps1xml с настроенными представлениями.

Пример 4: Использование свойств для вывода таблицы

В этом примере параметр -Property используется для отображения всех служб компьютера в таблице с двумя столбцами, в которой показаны свойства Name и DependentServices.

Get-Service | Format-Table -Property Name, DependentServices

Get-Service получает все службы на компьютере и отправляет объекты System.ServiceProcess.ServiceController по конвейеру. Format-Table использует параметр -Property, чтобы указать, что в таблице нужно отображать только свойства Name и DependentServices.

Name и DependentServices — это два свойства типа объекта. Чтобы просмотреть все свойства, выполните команду:

Get-Service | Get-Member -MemberType Properties

Пример 5: Форматирование вывода о процессе и расчёт времени его выполнения

В этом примере отображается таблица с именем процесса и общим временем выполнения для запущенных процессов программы Блокнот на локальном компьютере. Общее время выполнения рассчитывается путём вычитания времени запуска каждого процесса из текущего времени.

Get-Process notepad | Format-Table ProcessName, @{Label="Время работы"; Expression={(Get-Date) - $_.StartTime}}

Пример вывода:

ProcessName Время работы
----------- ------------
Notepad     06:08:18.9581686
Notepad     03:28:00.6712161
Notepad     00:14:33.2983814

Командлет Get-Process получает все процессы блокнота локального компьютера и отправляет объекты по конвейеру. Format-Table отображает таблицу с двумя столбцами: «ProcessName» (свойство Get-Process), и «Время работы» (вычисляемое свойство).

Свойство «Время работы» задаётся хэш-таблицей с двумя ключами: Label и Expression. Ключ Label задаёт имя свойства. Expression задаёт вычисление. Выражение получает свойство StartTime каждого объекта процесса и вычитает его из результата команды Get-Date, которая получает текущую дату и время.

При желании, заголовок первого столбца также можно русифицировать:

Get-Process notepad | Format-Table @{Label="Процесс"; Expression={$_.ProcessName}}, @{Label="Время работы"; Expression={(Get-Date) - $_.StartTime}}

Пример 6: Форматирование вывода информации о процессе

В этом примере командлет Get-CimInstance используется для получения времени выполнения всех процессов блокнота на локальном компьютере. Командлет Get-CimInstance можно использовать с параметром -ComputerName для получения информации с удалённых компьютеров.


$Processes = Get-CimInstance -Class win32_process -Filter "name='notepad.exe'"
$Processes | Format-Table ProcessName, @{ Label = "Total Running Time"; Expression={(Get-Date) - $_.CreationDate}}

Пример вывода:

ProcessName Total Running Time
----------- ------------------
notepad.exe 03:39:39.6260693
notepad.exe 00:19:56.1376922

Get-CimInstance получает экземпляры класса WMI Win32_Process, который описывает все процессы локального компьютера с именем notepad.exe. Объекты процесса хранятся в переменной $Processes.

Объекты процесса в переменной $Processes отправляются по конвейеру в Format-Table, которая отображает свойство ProcessName и новое вычисляемое свойство Total Running Time.

Команда присваивает имя нового вычисляемого свойства Total Running Time ключу Label. Блок сценария ключа Expression вычисляет, как долго выполняется процесс, вычитая дату создания процесса из текущей даты. Командлет Get-Date получает текущую дату. Дата создания вычитается из текущей даты. Результатом является значение Total Running Time.

Пример 6: Устранение ошибок формата

В следующих примерах показаны результаты добавления к выражению параметров -DisplayError или -ShowError.

Get-Date | Format-Table DayOfWeek,{ $_ / $null } -DisplayError

Пример вывода:

DayOfWeek  $_ / $null
--------- ------------
Wednesday #ERR

Ещё один пример:

Get-Date | Format-Table DayOfWeek,{ $_ / $null } -ShowError

Пример вывода:

DayOfWeek  $_ / $null
--------- ------------
Wednesday

InvalidArgument: Failed to evaluate expression " $_ / $null ".

Смотрите также: Как поменять заголовок столбца в выводе PowerShell. Как поменять ширину и выравнивание в таблицах


Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *