Форматирование вывода через Powershell FT


10 июля 2019


Powershell Format-Table - форматирование вывода в таблицу

Powershell Format-Table представляет вывод Powershell в виде таблицы. У этого командлета есть сокращенный алиас - ft. Противоположный вариант для ft это Format-List или fl. На картинке легче увидеть их отличия.

Powershell FT FL

Форматирование вывода через Powershell Format-Table

Если вы давно работаете с PS, то знаете, что имена колонок это свойства объекта и их всегда больше чем мы видим изначально. Для того что бы увидеть все возможные свойства (имена колонок) нужно выполнить следующее:

Get-Process | Get-Member

Таким образом мы увидим все свойства, который имеет объект, полученный через Get-Process. Я привожу пример с процессами, но я не встречал командлета, который бы не имел свойств т.е. вы можете работать с любым другим. Свойства на английском Property:

Get-Process Property

Попробуем теперь вывести эти свойства через ft:

Get-Process | ft -Property BasePriority, Threads

Если мы хотим вывести все свойства, то можем сделать так:

Get-Process | ft -Property *

Но нужны быть осторожным, т.к. операция может быть очень ресурсозатратной. 

Если добавить ключ Autosize, то расстояние колонок будет оптимально вмещать значения:

Get-Process | ft -Property * -AutoSize

Мы можем применить группировку. На примере ниже мы разделим в группы сервисы по статусу запущен/остановлен.

Get-Service | Sort-Object -Property Status | ft -GroupBy Status

Сортировка при этом обязательна т.к. иначе некорректно сработает.

 

Добавление колонок через Powershell Format-Table

Мы можем добавлять колонки с измененными значениями. Если мы сделаем как на примере ниже, то все значения Status ( статус работы) будут обособлены в отдельную колонку:

Get-Service | ft -Property Name, {$_.Status -eq "Disabled"}

Powershell FT

Меня не устраивает, что имя колонки не отображается корректно. Я дам ей имя "Отключенные сервисы":

Get-Service | ft -Property Name, @{Label = "Отключенные сервисы"; Expression={$_.Status -eq "Disabled" }}

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

Get-Process | Format-Table Name,@{Label = "Использованная физ.память(МБ)"; Expression = {($_.ws / 1024kb)}}

 

Фильтрация результатов c Powershell Format-Table

Для фильтрации легче всего использовать Where-Object:

Get-NetFirewallRule | Where-Object -Property Action -EQ "Block" | ft -Property Name

Объекты отфильтруются по свойству "Action" который равны "Block". В powershell нет стандартных операторов сравнения типа > < != и вместо них используются буквенные обозначения. Подробно они рассматривались здесь. 

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

Get-ChildItem -Path C:\Windows\ -Force | Where-Object -Property Length -GT 1Mb | Format-Table -Property Name, Length

 

...

Теги: #powershell


Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, преобретенного опыта и лучшие практики в системном администрировании и программировании.