Как в PowerShell менять набор выводимых по умолчанию данных
Какие столбцы таблицы в выводе командлета
Результат работы командлета зачастую выводится в виде таблицы с определённым набором полей.
Смотрите также:
- Тонкая настройка вывода с Format-Table
- Как поменять заголовок столбца в выводе PowerShell. Как поменять ширину и выравнивание в таблицах
К примеру следующая команда выведет список псевдонимов
Get-Alias
В выводе присутствуют четыре поля, три из которых в большинстве ситуаций бесполезны:
- CommandType — тип команды, в выводе по умолчанию это всегда Alias
- Name — ценное информационное поле, но в нём данные о псевдониме и команде скомканы в одну строку
- Version — версия, обычно здесь пусто
- Source — источник, аналогично, зачастую здесь пусто
Неужели это всё, что можно узнать о псевдонимах команды? На самом деле нет. Посмотрите на вывод следующей команды:
Get-Alias | Get-Member
Всего доступно аж 19 свойств для выводимых командлетом Get-Alias объектов:
- CommandType
- Definition
- Description
- Module
- ModuleName
- Name
- Options
- OutputType
- Parameters
- ParameterSets
- ReferencedCommand
- RemotingCapability
- ResolvedCommand
- Source
- Version
- Visibility
- DisplayName
- HelpUri
- ResolvedCommandName
Среди них есть наверняка более полезные, чем три пустых столбца таблицы.
Результатом работы многих командлетов являются объекты
Нужно помнить, что хотя вывод многих командлетов представляется в виде таблицы, на самом деле результатом работы командлета является не таблица и не строки, зачастую результатом работы является объект.
Именно свойства этого объекта и показывает командлет Get-Member в команде вида:
КОМАНДЛЕТ | Get-Member
Если вы присваиваете вывод командлета переменной, то ей также передаётся именно объект, обладающий всем набором свойств. В дальнейшем вы можете работать с любыми свойствами данного объекта ссылаясь на переменную.
Но на вывод в консоль показывает отформатированную таблицу, которая строится исходя из части данных. Вы можете изменить набор данных, которые выводит командлет.
Какие свойства имеет командлет
Но чтобы изменить набор выводимых командлетом данных, нужно знать о имеющихся свойствах данного объекта. Вы можете это сделать командой вида:
КОМАНДЛЕТ | Get-Member -MemberType Property
Например, вывод всех свойств командлета Get-Alias:
Get-Alias | Get-Member -MemberType Property
Если вы хотите вывести только имена свойств, без построения таблицы, то используйте конструкцию вида:
(КОМАНДЛЕТ | Get-Member -MemberType Property).Name
Например:
(Get-Alias | Get-Member -MemberType Property).Name
Как изменить поля таблицы в выводе командлета
Итак, теперь, когда мы знаем свойства объекта, выводимого командлетом, мы можем установить свой собственный набор свойств для вывода. Это можно сделать командой вида:
КОМАНДЛЕТ | Format-Table -Property СВОЙСТВО1,СВОЙСТВО2,СВОЙСТВО3,СВОЙСТВО4,…...
Например, следующая команда выведет имя псевдонима и его значение в простой для восприятия таблице без лишних полей:
Get-Alias | Format-Table -Property Name,Definition
Возможно, вместо краткости вы захотите вывести больше полезных данных, примеры:
Get-Alias | Format-Table -Property Name,Definition,Options,Module,OutputType Get-Alias | Format-Table -Property Name,Definition,Options,Parameters
Если данных действительно много и они не помещаются по ширине экрана, то вместо Format-Table используйте командлет Format-List, например:
Get-Alias | Format-List -Property Name,Definition,Options,Module,OutputType,Parameters
В результате вместо таблицы будет выведен список.
Выбор свойств объекта с Select-Object
Для выбора свойств объекта вы также можете использовать командлет Select-Object:
КОМАНДЛЕТ | Select-Object -Property СВОЙСТВО1,СВОЙСТВО2,СВОЙСТВО3,СВОЙСТВО4,… | Format-Table
Например, следующие команды дадут идентичный результат:
Get-Alias | Format-Table -Property Name,Definition Get-Alias | Select-Object -Property Name,Definition | Format-Table
Командлет Select-Object может применяться не только для выбора свойств, но и для выбора объектов из нескольких. Кроме того, Select-Object возвращает новый объект, содержащий только выбранные свойства.
Опция -Property
Некоторые командлеты имеют опцию -Property которая позволяет выбирать, какие именно свойства вы хотите показать. Пример командлета с опцией -Property это Get-ComputerInfo:
Get-ComputerInfo -Property "CSManufacturer","CSModel","BiosBIOSVersion","BiosSMBIOSBIOSVersion" | Format-List
Пример изменения вывода командлета
Рассмотрим ещё один пример. Следующий командлет выводит список файлов и папок в указанном каталоге, если каталог не указан, то выводятся данные для текущей папки:
Get-ChildItem
К примеру, вместо времени последнего доступа, мы хотим узнать дату создания файла, а длину файла не выводить вовсе.
Для этого посмотрим на доступные для командлета Get-ChildItem свойства:
Get-ChildItem | Get-Member -MemberType Property
Обратите внимание, что выведено два набора свойства, поскольку командлет Get-ChildItem выводит объекты двух видов:
- System.IO.DirectoryInfo (информация о директориях, то есть папках)
- System.IO.FileInfo (информация о файлах)
Выберем нужные нам поля. Например, следующая команда покажет режим, имя и время создания файлов и папок:
Get-ChildItem | Format-Table -Property Mode,Name,CreationTime
Связанные статьи:
- Фильтрация свойств объектов в PowerShell (84.3%)
- Как выводить данные без таблицы в PowerShell (77.6%)
- В PowerShell таблица не помещается на экран — как исправить (РЕШЕНО) (68.6%)
- Тонкая настройка вывода с Format-Table (68.6%)
- Как поменять заголовок столбца в выводе PowerShell. Как поменять ширину и выравнивание в таблицах (68.6%)
- Аналог echo в PowerShell (RANDOM - 54%)