Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
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.eExpression
Примеры
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,
@{
Expr={$_.Parameters.Keys.Count}
Align='Center'
} |
Out-File .\aliases.htm -Force
В этом примере создается html-таблица, содержащая список псевдонимов PowerShell и параметры числа для каждой команды с псевдонимами. Значения столбца ParameterCount центрируются.
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
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-файла в порядке возрастания по дате. Но в течение каждой даты он сортирует строки в порядке убывания по 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