Довольно часто требуется запросить какие-либо данные и вывести их в виде таблицы. PowerShell предоставляет для этого множество способов, некоторые из которых мы сегодня рассмотрим.
Для примера возьмем командлет Get-Process, который, будучи запущенным без параметров, возвращает все запущенные в системе процессы в виде готовой таблицы. Выведем с его помощью процессы, потребляющие наибольшее количество процессорного времени:
Get-Process | where {$_.CPU -gt 10000}
Для большей наглядности отсортируем полученные процессы по потреблению процессорного времени в порядке убывания:
Get-Process | where {$_.CPU -gt 10000} | sort CPU -Desc
По умолчанию Get-Process выводит определенный фиксированный набор столбцов. Давайте переопределим его и выведем только нужные нам столбцы, например процессорное время (CPU), идентификатор (ID) и имя (ProcessName) процесса:
Get-Process | where {$_.CPU -gt 10000} | sort CPU -Desc | ft CPU, ID, ProcessName -auto
Предположим, что нам нужно получить какие нибудь особые параметры, отсутствующие в стандартном выводе. Посмотреть имеющиеся параметры можно с помощью построчного вывода, например так мы выведем все свойства процесса lsass:
Get-Process lsass | fl *
А теперь добавим в вывод описание процесса (Description):
Get-Process | where {$_.CPU -gt 10000} | sort CPU -Desc | ft CPU, ProcessName, Description -auto
Ну и если вас не устраивают стандартные параметры, можно создать свой собственный столбец. Для примера создадим столбец с именем «Process name» и поместим его в переменную:
$p = @(Expression={$_.Name}; Label = ″Process name″; width=30}
Здесь Expression — это выражение, которое определяет значение параметра, Label — название столбца, а width — его ширина.
Полученную переменную затем можно добавить в вывод как обычный параметр:
Get-Process | where {$_.CPU -gt 10000} | sort CPU -Desc | ft CPU, $P, Description -auto
С помощью Expression можно производить практически любые преобразования. Например, требуется округлить процессорное время до целого числа, для чего воспользуемся статическим классом методом Round класса [math] :
$c = @(Expression={[math]::Round($_.CPU,0)}; Label = ″CPU time″}
И затем добавим полученное значение в таблицу:
Get-Process | where {$_.CPU -gt 10000} | sort CPU -Desc | ft $C, $P, Description -auto
Таким образом можно организовать вывод нужной информации в удобном для себя виде.