Поиск по сайту:

Вычисляемые свойства в функциях PowerShell


Во многих случаях свойство, возвращаемое из объекта в PowerShell, может иметь не идеальное имя или значение не совсем в нужном формате. Для таких экземпляров PowerShell имеет конструкцию вычисляемых свойств. Эта полезная функция позволяет легко изменять возвращаемое значение во время операций выбора и быстро и легко возвращать то, что необходимо в конвейерном выводе. Как это выглядит на практике? Как насчет того, чтобы взять один формат даты и перейти на другой формат?

$Object | Select-Object "Name","Date",@{
	Name = 'NewDate'
	Expression = { Get-Date $_.Date -Format "MM/dd/yyyy" }
}

Если вы не видели этого раньше, это может быть довольно странным форматом для вставки в команду Select-Object. Читайте дальше, чтобы узнать, что означает каждая часть и как ее можно использовать, чтобы легко манипулировать данными по мере необходимости!

Анатомия вычисляемого свойства

Вычисляемое свойство по своей сути представляет собой хэш-таблицу, которая определяет, как выходные данные должны выглядеть для свойства. Есть несколько ключей, которые мы можем определить для управления выводом.

  • Имя/метка – указывает имя возвращаемого свойства с использованием метки в качестве псевдонима.
  • Выражение — блок скрипта, используемый для вычисления нового значения свойства.
  • Выравнивание. Когда используется командлет табличного вывода, он определяет способ отображения значений в столбце с использованием left, center, или right в качестве допустимых значений.
  • Formatstring – указывает строку формата, которая является строкой форматирования .NET.
  • Ширина — для табличного вывода определяет максимальную ширину столбца, которая должна быть больше 0.
  • Глубина – используется только с командлетом Format-Custom. Указывает максимальную глубину расширения для каждого свойства.
  • По возрастанию/убыванию — укажите порядок сортировки одного или нескольких свойств, это логические значения, для которых задано значение $True или $False. .

Как это выглядит на практике? Для Select-Object обычно используются только Name и Expression. Для управления определенным табличным выводом вы можете использовать различные параметры выравнивания, формата и ширины.

Select-Object и вычисляемые свойства

В большинстве случаев Select-Object используется с вычисляемыми свойствами, поскольку это позволяет быстро и легко манипулировать выводом без необходимости изменять исходные данные и удобно передавать данные по конвейеру в нужном формате. Ниже приведен пример того, как это выглядит на практике! Во-первых, мы начнем с того же объекта, который будем использовать для демонстрации всех приведенных ниже примеров.

$Object = [PSCustomObject]@{
  'Name'    = 'Test Object'
  'Date'    = Get-Date
  'Number'  = 100
  'Enabled' = $True
  'Extra'   = @('One','Two','Three')
}

$Object

Глядя на дату, она не совсем соответствует ожидаемой. Давайте изменим это на другой формат. Вы можете изменить команду Get-Date для самого объекта, но иногда у вас нет такой возможности. Поэтому мы можем изменить формат даты, используя вычисляемое свойство, как показано ниже. В приведенном ниже коде мы меняем формат даты на MM/dd/yyyy, используя параметр Format команды Get-Date.

$Object | Select-Object Name,@{
  Name = 'NewDate'
  Expression = { Get-Date $_.Date -Format "MM/dd/yyyy" }
}

Как видите, новое свойство с именем NewDate было создано, и формат даты изменился! Поскольку здесь используется блок скрипта, вы можете содержать внутри много логики, например операторы управления, такие как switch, или дополнительные поисковые запросы, если это необходимо. Читайте дальше, чтобы узнать, как выводить данные в лучшем формате.

Таблица форматов и вычисляемые свойства

Представление Format-Table по умолчанию может оставлять желать лучшего. Поэтому давайте посмотрим, что мы можем сделать, чтобы немного улучшить работу с ним. Используя тот же объект, который был определен изначально, как выглядит результат?

Мы можем сделать это лучше, это точно! Во-первых, выравнивание не идеально для Number или Enabled. Во-вторых, мы должны вывести Number с двумя десятичными точками. Наконец, давайте сделаем Name шире, изменим Date на наш новый формат и присоединим Extra запятыми. Ниже показано, как мы можем использовать вычисляемые свойства для изменения представления!

$Object | Format-Table @{
  Name = 'Name'
  Expression = { $_.Name }
  Width = 20
},
@{
  Name = 'Date'
  Expression = { Get-Date $_.Date -Format "MM/dd/yyyy" }
  Width = 10
},
@{
  Name = 'Number'
  Expression = { $_.Number }
  Formatstring = 'N2'
  Alignment = 'Center'
  Width = 10
},
@{
  Name = 'Enabled'
  Expression = { $_.Enabled }
  Alignment = 'Center'
  Width = 10
},
@{
  Name = 'Extra'
  Expression = { $_.Extra -Join ", " }
  Width = 30
}

Намного лучше! Это упрощает понимание данных, и вы можете видеть, как все различные возможности с вычисляемыми свойствами объединяются, чтобы помочь сделать эту работу лучше.

Заключение

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