Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
PowerShell позволяет динамически добавлять новые свойства и изменять форматирование выходных данных объектов в конвейер.
Длинное описание
Несколько командлетов PowerShell преобразуют, группировать или обрабатывать входные объекты в выходные объекты с помощью параметров, позволяющих создавать новые свойства для этих выходных объектов. Эти параметры можно использовать для создания новых вычисляемых свойств на выходных объектах на основе значений входных объектов. Входной объект можно получить с помощью $_ или $PSItem автоматической переменной в элементе Expression вычисляемого свойства.
Вычисляемое свойство определяется как хэш-файл , содержащий пары "ключ-значение", указывающие значение только что вычисляемого свойства. Некоторые команды поддерживают другие пары "ключ-значение", которые управляют отображением свойства в выходных данных.
Поддерживаемые командлеты
Следующие командлеты поддерживают вычисляемые значения свойств для параметра Property. Командлеты Format-* также поддерживают вычисляемые значения для параметра GroupBy.
Следующий элемент списка содержит командлеты, поддерживающие вычисляемые свойства и пары "ключ-значение", поддерживаемые каждым командлетом.
Compare-ObjectExpression
ConvertTo-Html-
Name/Label— необязательно (добавлено в PowerShell 6.x) Expression-
Width— необязательно -
Alignment— необязательно
-
Format-CustomExpression-
Depth— необязательно
Format-List-
Name/Label— необязательно Expression-
FormatString— необязательно
Этот же набор пар "ключ-значение" также применяется к вычисляемым значениям свойств, передаваемым параметру GroupBy для всех командлетов
Format-*.-
Format-Table-
Name/Label— необязательно Expression-
FormatString— необязательно -
Width— необязательно -
Alignment— необязательно
-
Format-WideExpression-
FormatString— необязательно
Group-ObjectExpression
Measure-Object- Поддерживается только блок скрипта для выражения, а не хэш-файл.
- Не поддерживается в PowerShell 5.1 и более ранних версиях.
Select-Object-
Name/Label— необязательно Expression
-
Sort-ObjectExpression-
Ascending/Descending— необязательно
Заметка
Значение Expression может быть блоком скрипта, а не хэш-файлом. Дополнительные сведения см. в разделе Заметки.
Определения ключей хэш-таблицы
-
Name/Label— указывает имя создаваемого свойства. Вы можете использоватьNameили его псевдоним,Label, взаимозаменяемо. -
Expression— строка или блок скрипта, используемый для вычисления значения нового свойства. ЕслиExpressionявляется строкой, значение интерпретируется как имя свойства входного объекта. Это более короткий вариант, чемExpression = { $_.<PropertyName> }. -
Alignment. Используется командлетами, которые создают табличные выходные данные, чтобы определить, как значения отображаются в столбце. Значение должно быть'Left','Center'или'Right'. -
FormatString— задает строку формата, которая определяет форматирование значения для выходных данных. Дополнительные сведения о строках форматирования см. в разделе Типы форматов в .NET. -
Width. Указывает максимальный столбец ширины таблицы при отображении значения. Значение должно быть больше0. -
Depth— параметр глубиныFormat-Customзадает глубину расширения для всех свойств. КлючDepthпозволяет указать глубину расширения для каждого свойства. -
Ascending/Descending. Позволяет указать порядок сортировки для одного или нескольких свойств. Это логические значения.
Вам не нужно указывать хэш-ключи, если указанный префикс имени является однозначной. Например, вместо nможно использовать Name вместо e и Expression.
Примеры
Compare-Object
С помощью вычисляемых свойств можно управлять сравнением свойств входных объектов. В этом примере вместо сравнения значений напрямую значения сравниваются с результатом арифметической операции (модулы 2).
Compare-Object @{p=1} @{p=2} -Property @{ Expression = { $_.p % 2 } }
$_.p % 2 SideIndicator
---------- -------------
0 =>
1 <=
ConvertTo-Html
ConvertTo-Html может преобразовать коллекцию объектов в HTML-таблицу.
Вычисляемые свойства позволяют управлять представлением таблицы.
Get-Alias |
ConvertTo-Html Name,
Definition,
@{
Name='ParameterCount'
Expr={$_.Parameters.Keys.Count}
Align='Center'
} |
Out-File .\aliases.htm -Force
В этом примере создается html-таблица, содержащая список псевдонимов PowerShell и параметры числа для каждой команды с псевдонимами. Значения столбца ParameterCount центрируются.
Format-Custom
Format-Custom предоставляет пользовательское представление объекта в формате, аналогичном определению класса. Более сложные объекты могут содержать элементы, глубоко вложенные с помощью сложных типов. Параметр глубиныFormat-Custom задает глубину расширения для всех свойств. Ключ Depth позволяет указать глубину расширения для каждого свойства.
В этом примере ключ Depth упрощает пользовательские выходные данные для командлета Get-Date.
Get-Date возвращает объект DateTime. Свойство Date этого объекта также является объектом DateTime, поэтому объект вложен.
Get-Date | Format-Custom @{Expr={$_.Date};Depth=1},TimeOfDay
class DateTime
{
$_.Date =
class DateTime
{
Date = 8/7/2020 12:00:00 AM
Day = 7
DayOfWeek = Friday
DayOfYear = 220
Hour = 0
Kind = Local
Millisecond = 0
Minute = 0
Month = 8
Second = 0
Ticks = 637323552000000000
TimeOfDay = 00:00:00
Year = 2020
DateTime = Friday, August 07, 2020 12:00:00 AM
}
TimeOfDay =
class TimeSpan
{
Ticks = 435031592302
Days = 0
Hours = 12
Milliseconds = 159
Minutes = 5
Seconds = 3
TotalDays = 0.503508787386574
TotalHours = 12.0842108972778
TotalMilliseconds = 43503159.2302
TotalMinutes = 725.052653836667
TotalSeconds = 43503.1592302
}
}
Format-List
В этом примере мы используем вычисляемые свойства для изменения имени и формата выходных данных из Get-ChildItem.
Get-ChildItem *.json -File |
Format-List FullName,
@{
Name='Modified'
Expression={$_.LastWriteTime}
FormatString='O'
},
@{
Name='Size'
Expression={$_.Length/1KB}
FormatString='N2'
}
FullName : C:\Git\PS-Docs\PowerShell-Docs\.markdownlint.json
Modified : 2020-07-23T10:26:28.4092457-07:00
Size : 2.40
FullName : C:\Git\PS-Docs\PowerShell-Docs\.openpublishing.publish.config.json
Modified : 2020-07-23T10:26:28.4092457-07:00
Size : 2.25
FullName : C:\Git\PS-Docs\PowerShell-Docs\.openpublishing.redirection.json
Modified : 2020-07-27T13:05:24.3887629-07:00
Size : 324.60
Format-Table
В этом примере вычисляемое свойство добавляет свойство Type, используемое для классификации файлов по типу контента.
Get-ChildItem -File |
Sort-Object Extension |
Format-Table Name, Length -GroupBy @{
Name='Type'
Expression={
switch ($_.Extension) {
'.md' {'Content'}
'' {'Metacontent'}
'.ps1' {'Automation'}
'.yml' {'Automation'}
default {'Configuration'}
}
}
}
Type: Metacontent
Name Length
---- ------
ThirdPartyNotices 1229
LICENSE-CODE 1106
LICENSE 19047
Type: Configuration
Name Length
---- ------
.editorconfig 183
.gitattributes 419
.gitignore 228
.markdownlint.json 2456
.openpublishing.publish.config.json 2306
.openpublishing.redirection.json 332394
.localization-config 232
Type: Content
Name Length
---- ------
README.md 3355
CONTRIBUTING.md 247
Type: Automation
Name Length
---- ------
.openpublishing.build.ps1 796
build.ps1 7495
ci.yml 645
ci-steps.yml 2035
daily.yml 1271
Format-Wide
Командлет Format-Wide позволяет отображать значение одного свойства для объектов в коллекции в виде списка с несколькими столбцами.
В этом примере мы хотим увидеть имя файла и размер (в килобайтах) в виде широкого списка. Так как Format-Wide не отображает более одного свойства, мы используем вычисляемое свойство для объединения значения двух свойств в одно значение.
Get-ChildItem -File |
Format-Wide -Property @{e={'{0} ({1:N2}kb)' -f $_.Name,($_.Length/1kb)}}
.editorconfig (0.18kb) .gitattributes (0.41kb)
.gitignore (0.22kb) .localization-config (0.23kb)
.markdownlint.json (2.40kb) .openpublishing.build.ps1 (0.78kb)
.openpublishing.publish.config.json (2.25kb) .openpublishing.redirection.json (324.60kb)
build.ps1 (7.32kb) ci.yml (0.63kb)
ci-steps.yml (1.99kb) CONTRIBUTING.md (0.24kb)
daily.yml (1.24kb) LICENSE (18.60kb)
LICENSE-CODE (1.08kb) README.md (3.28kb)
ThirdPartyNotices (1.20kb)
Group-Object
Командлет Group-Object отображает объекты в группах на основе значения указанного свойства. В этом примере вычисляемое свойство подсчитывает количество файлов каждого типа контента.
Get-ChildItem -File |
Sort-Object Extension |
Group-Object -NoElement -Property @{
Expression={
switch ($_.Extension) {
'.md' {'Content'}
'' {'Metacontent'}
'.ps1' {'Automation'}
'.yml' {'Automation'}
default {'Configuration'}
}
}
}
Count Name
----- ----
5 Automation
7 Configuration
2 Content
3 Metacontent
Measure-Object
Командлет Measure-Object вычисляет числовые свойства объектов. В этом примере мы используем вычисляемое свойство для получения количества чисел от 1 до 10, которые равномерно различаются на 3.
Блок скрипта возвращается $true , если число делится на 3 и $false для всех остальных чисел. Операция Sum обрабатывает значения $true как 1 и $false значения как 0.
1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
Count : 10
Average :
Sum : 3
Maximum :
Minimum :
StandardDeviation :
Property : ($_ % 3) -eq 0
Заметка
В отличие от других командлетов, Measure-Object не принимает хэш-файл для вычисляемых свойств. Необходимо использовать скриптблок.
Select-Object
Вы можете использовать вычисляемые свойства для добавления дополнительных элементов в выходные данные объектов с помощью командлета Select-Object. В этом примере мы перечисляем псевдонимы PowerShell, начинающиеся с буквы C. Используя Select-Object, мы выводим псевдоним, командлет, сопоставленный с ним, и число параметров, определенных для командлета. С помощью вычисляемого свойства можно создать свойство ParameterCount.
$aliases = Get-Alias c* |
Select-Object Name,
Definition,
@{
Name='ParameterCount'
Expr={$_.Parameters.Keys.Count}
}
$aliases | Get-Member
$aliases
TypeName: Selected.System.Management.Automation.AliasInfo
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Definition NoteProperty string Definition=Get-Content
Name NoteProperty string Name=cat
ParameterCount NoteProperty System.Int32 ParameterCount=21
Name Definition ParameterCount
---- ---------- --------------
cat Get-Content 21
cd Set-Location 15
cdd Push-MyLocation 1
chdir Set-Location 15
clc Clear-Content 20
clear Clear-Host 0
clhy Clear-History 17
cli Clear-Item 20
clp Clear-ItemProperty 22
cls Clear-Host 0
clv Clear-Variable 19
cnsn Connect-PSSession 29
compare Compare-Object 20
copy Copy-Item 24
cp Copy-Item 24
cpi Copy-Item 24
cpp Copy-ItemProperty 23
cvpa Convert-Path 13
Sort-Object
С помощью вычисляемых свойств можно сортировать данные в разных заказах на свойство. В этом примере данные из CSV-файла сортируются по возрастанию по date. Но в течение каждой даты он сортирует строки в порядке убывания по UnitsSold.
Import-Csv C:\temp\sales-data.csv |
Sort-Object Date, @{Expr={$_.UnitsSold}; Desc=$true}, Salesperson |
Select-Object Date, Salesperson, UnitsSold
Date Salesperson UnitsSold
---- ----------- ---------
2020-08-01 Sally 3
2020-08-01 Anne 2
2020-08-01 Fred 1
2020-08-02 Anne 6
2020-08-02 Fred 2
2020-08-02 Sally 0
2020-08-03 Anne 5
2020-08-03 Sally 3
2020-08-03 Fred 1
2020-08-04 Anne 2
2020-08-04 Fred 2
2020-08-04 Sally 2
Примечания.
Вы можете напрямую указать блок скрипта выражения в качестве аргумента, а не указывать его как
Expressionзапись в хэш-файле. Например:'1', '10', '2' | Sort-Object { [int] $_ }Этот пример удобно для командлетов, которые не требуют именования свойства с помощью ключа
Name, напримерSort-Object,Group-ObjectиMeasure-Object.Для командлетов, поддерживающих именование свойства, блок скрипта преобразуется в строку и используется в качестве имени свойства в выходных данных.
Expressionскриптблоки выполняются в дочерних областях, что означает, что переменные вызывающего объекта не могут быть напрямую изменены.Логика конвейера применяется к выходным данным из
Expressionскриптов. Это означает, что вывод массива с одним элементом приводит к тому, что массив распакуется.Для большинства командлетов ошибки внутри скриптов выражений тихо игнорируются. Для
Sort-Object, завершающие инструкции и завершающие скрипты ошибки выходных, но они не завершают инструкцию.
См. также
PowerShell