about_Calculated_Properties
Krátký popis
PowerShell umožňuje dynamicky přidávat nové vlastnosti a měnit formátování výstupu objektů do kanálu.
Dlouhý popis
Několik rutin PowerShellu transformuje, seskupuje nebo zpracovává vstupní objekty na výstupní objekty pomocí parametrů, které umožňují přidání nových vlastností do těchto výstupních objektů. Pomocí těchto parametrů můžete vygenerovat nové počítané vlastnosti pro výstupní objekty na základě hodnot vstupních objektů. Počítaná vlastnost je definována hashtable obsahující páry klíč-hodnota, které určují název nové vlastnosti, výraz pro výpočet hodnoty a volitelné informace o formátování.
Podporované rutiny
Následující rutiny podporují počítané hodnoty vlastností pro parametr Property . Rutiny Format-*
také podporují počítané hodnoty pro parametr GroupBy .
Následující seznam uvádí rutiny, které podporují počítané vlastnosti a páry klíč-hodnota, které každá rutina podporuje.
Compare-Object
expression
ConvertTo-Html
name
/label
– volitelné (přidáno v PowerShellu 6.x)expression
width
-volitelnýalignment
-volitelný
Format-Custom
expression
depth
-volitelný
Format-List
name
/label
-volitelnýexpression
formatstring
-volitelný
Stejná sada párů klíč-hodnota platí také pro počítané hodnoty vlastností předané parametru GroupBy pro všechny
Format-*
rutiny.Format-Table
name
/label
-volitelnýexpression
formatstring
-volitelnýwidth
-volitelnýalignment
-volitelný
Format-Wide
expression
formatstring
-volitelný
Group-Object
expression
Measure-Object
- Podporuje pouze blok skriptu pro výraz, nikoli hashtable.
- PowerShell 5.1 a starší nepodporuje.
Select-Object
name
/label
-volitelnýexpression
Sort-Object
expression
ascending
/descending
-volitelný
Poznámka:
Hodnota expression
může být blok skriptu místo hashtable. Další informace najdete v části Poznámky .
Definice klíče hashovací tabulky
name
/label
- Určuje název vytvářené vlastnosti. Můžete použítname
nebo jeho alias ,label
zaměnitelně.expression
– Blok řetězce nebo skriptu sloužící k výpočtu hodnoty nové vlastnosti.expression
Pokud je řetězec, hodnota je interpretována jako název vlastnosti vstupního objektu. Jedná se o kratší možnost nežexpression = { $_.<PropertyName> }
.alignment
– Používá se rutinami, které vytvářejí tabulkový výstup k definování způsobu zobrazení hodnot ve sloupci. Hodnota musí být'left'
,'center'
nebo'right'
.formatstring
– Určuje formátovací řetězec, který definuje, jak je hodnota formátována pro výstup. Další informace o formátovací řetězce naleznete v tématu Typy formátů v .NET.width
– Určuje sloupec maximální šířky v tabulce při zobrazení hodnoty. Hodnota musí být větší než0
.depth
- ParametrFormat-Custom
Hloubka určuje hloubku rozšíření pro všechny vlastnosti. Klíčdepth
umožňuje zadat hloubku rozšíření na vlastnost.ascending
/descending
– Umožňuje zadat pořadí řazení pro jednu nebo více vlastností. Jedná se o logické hodnoty.
Klíče hashovací tabulky není nutné vypsat, pokud je zadaná předpona názvu jednoznačná. Můžete například použít n
místo Name
a e
místo Expression
.
Příklady
Compare-Object
S počítanými vlastnostmi můžete řídit, jak se vlastnosti vstupních objektů porovnávají. V tomto příkladu se hodnoty místo přímého porovnání hodnot porovnávají s výsledkem aritmetické operace (moduly 2).
Compare-Object @{p=1} @{p=2} -property @{ Expression = { $_.p % 2 } }
$_.p % 2 SideIndicator
---------- -------------
0 =>
1 <=
ConvertTo-Html
ConvertTo-Html
může převést kolekci objektů na tabulku HTML.
Počítané vlastnosti umožňují řídit, jak se tabulka prezentuje.
Get-Alias |
ConvertTo-Html Name,
Definition,
@{
name='ParameterCount'
expr={$_.Parameters.Keys.Count}
align='center'
} |
Out-File .\aliases.htm -Force
Tento příklad vytvoří tabulku HTML obsahující seznam aliasů PowerShellu a číselných parametrů pro každý příkaz aliasu. Hodnoty sloupce ParameterCount jsou za středem.
Format-Custom
Format-Custom
poskytuje vlastní zobrazení objektu ve formátu podobném definici třídy. Složitější objekty můžou obsahovat členy, které jsou hluboce vnořené se složitými typy. Parametr Format-Custom
Hloubka určuje hloubku rozšíření pro všechny vlastnosti. Klíč depth
umožňuje zadat hloubku rozšíření na vlastnost.
V tomto příkladu depth
klíč zjednodušuje vlastní výstup rutiny Get-Date
. Get-Date
vrátí objekt DateTime. Vlastnost Date tohoto objektu je také Objekt DateTime , takže objekt je vnořený.
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
V tomto příkladu používáme počítané vlastnosti ke změně názvu a formátu výstupu z 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
V tomto příkladu počítaná vlastnost přidá vlastnost Type sloužící ke klasifikaci souborů podle typu obsahu.
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
Rutina Format-Wide
umožňuje zobrazit hodnotu jedné vlastnosti pro objekty v kolekci jako seznam s více sloupci.
V tomto příkladu chceme zobrazit název souboru a velikost (v kilobajtech) jako široký výpis. Vzhledem k tomu Format-Wide
, že nezobrazuje více než jednu vlastnost, používáme počítanou vlastnost ke sloučení hodnoty dvou vlastností do jedné hodnoty.
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
Rutina Group-Object
zobrazí objekty ve skupinách na základě hodnoty zadané vlastnosti. V tomto příkladu počítaná vlastnost spočítá počet souborů každého typu obsahu.
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
Rutina Measure-Object
vypočítá číselné vlastnosti objektů. V tomto příkladu použijeme počítanou vlastnost k získání počtu čísel mezi 1 a 10, které jsou rovnoměrně dělitelné o 3.
Blok skriptu se vrátí $true
, pokud je číslo dělitelné číslem 3 a $false
pro všechna ostatní čísla. Operace Sum považuje $true
hodnoty za hodnoty a 1
$false
hodnoty jako 0
.
1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
Count : 10
Average :
Sum : 3
Maximum :
Minimum :
StandardDeviation :
Property : ($_ % 3) -eq 0
Poznámka:
Na rozdíl od ostatních rutin Measure-Object
nepřijímá hashovací tabulku pro počítané vlastnosti. Musíte použít blok skriptu.
Select-Object
Počítané vlastnosti můžete použít k přidání dalších členů do výstupu objektů pomocí rutiny Select-Object
. V tomto příkladu uvádíme aliasy PowerShellu, které začínají písmenem C
. Pomocí Select-Object
, vypíšeme alias, rutinu, na které je namapovaná, a počet parametrů definovaných pro rutinu. Pomocí počítané vlastnosti můžeme vytvořit vlastnost 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
Pomocí počítaných vlastností můžete řadit data v různých objednávkách na vlastnost. Tento příklad seřadí data ze souboru CSV ve vzestupném pořadí podle data. V každém datu ale seřadí řádky sestupně podle 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
Notes
Blok skriptu výrazu můžete zadat přímo jako argument, místo abyste ho zadali jako
Expression
položku v hashovatelné tabulce. Příklad:'1', '10', '2' | Sort-Object { [int] $_ }
Tento příklad je vhodný pro rutiny, které nevyžadují (nebo podporují) pojmenování vlastnosti prostřednictvím
Name
klíče, napříkladSort-Object
,Group-Object
aMeasure-Object
.U rutin, které podporují pojmenování vlastnosti, se blok skriptu převede na řetězec a použije se jako název vlastnosti ve výstupu.
Expression
Bloky skriptu se spouští v podřízených oborech, což znamená, že proměnné volajícího nelze přímo upravit.Logika kanálu se použije na výstup z
Expression
bloků skriptu. To znamená, že výstup pole s jedním prvkem způsobí, že pole se rozbalí.U většiny rutin se chyby uvnitř bloků skriptu výrazů tiše ignorují. V případě
Sort-Object
chyb ukončování příkazů a ukončování skriptů jsou výstupem , ale neukončují příkaz.