Как в 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

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

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

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