Вычисляемые свойства в функциях 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
}
Намного лучше! Это упрощает понимание данных, и вы можете видеть, как все различные возможности с вычисляемыми свойствами объединяются, чтобы помочь сделать эту работу лучше.
Заключение
Вычисляемые свойства — это уникальная языковая конструкция, которая используется, когда требуется быстрый и гибкий способ изменения выходных данных конвейера без изменения исходного кода. Благодаря функциям, доступным как для отображения на консоли, так и для манипулирования данными при передаче данных дальше по конвейеру, вычисляемые свойства можно быстро интегрировать в любой скрипт.