Powershell Format-Table представляет вывод Powershell в виде таблицы. У этого командлета есть сокращенный алиас - ft. Противоположный вариант для ft это Format-List или fl. На картинке легче увидеть их отличия.
Форматирование вывода через Powershell Format-Table
Если вы давно работаете с PS, то знаете, что имена колонок это свойства объекта и их всегда больше чем мы видим изначально. Для того что бы увидеть все возможные свойства (имена колонок) нужно выполнить следующее:
Get-Process | Get-Member
Таким образом мы увидим все свойства, который имеет объект, полученный через 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"}
Меня не устраивает, что имя колонки не отображается корректно. Я дам ей имя "Отключенные сервисы":
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
...
Подписывайтесь на наш Telegram канал
Теги: #powershell