about_Calculated_Properties
Korte beschrijving
PowerShell biedt de mogelijkheid om dynamisch nieuwe eigenschappen toe te voegen en de opmaak van objectenuitvoer aan de pijplijn te wijzigen.
Lange beschrijving
Verschillende PowerShell-cmdlets transformeren, groeperen of verwerken invoerobjecten in uitvoerobjecten met behulp van parameters waarmee nieuwe eigenschappen kunnen worden toegevoegd aan deze uitvoerobjecten. U kunt deze parameters gebruiken om nieuwe, berekende eigenschappen te genereren voor uitvoerobjecten op basis van de waarden van invoerobjecten. De berekende eigenschap wordt gedefinieerd door een hashtabel met sleutel-waardeparen die de naam van de nieuwe eigenschap opgeven, een expressie voor het berekenen van de waarde en optionele opmaakgegevens.
Ondersteunde cmdlets
De volgende cmdlets ondersteunen berekende eigenschapswaarden voor de parameter Eigenschap . De Format-*
cmdlets ondersteunen ook berekende waarden voor de Parameter GroupBy .
De volgende lijst bevat een overzicht van de cmdlets die ondersteuning bieden voor berekende eigenschappen en de sleutel-waardeparen die door elke cmdlet worden ondersteund.
Compare-Object
expression
ConvertTo-Html
name
/label
- optioneel (toegevoegd in PowerShell 6.x)expression
width
-facultatiefalignment
-facultatief
Format-Custom
expression
depth
-facultatief
Format-List
name
/label
-facultatiefexpression
formatstring
-facultatief
Dezelfde set sleutel-waardeparen is ook van toepassing op berekende eigenschapswaarden die worden doorgegeven aan de GroupBy-parameter voor alle
Format-*
cmdlets.Format-Table
name
/label
-facultatiefexpression
formatstring
-facultatiefwidth
-facultatiefalignment
-facultatief
Format-Wide
expression
formatstring
-facultatief
Group-Object
expression
Measure-Object
- Ondersteunt alleen een scriptblok voor de expressie, niet een hashtabel.
- Niet ondersteund in PowerShell 5.1 en ouder.
Select-Object
name
/label
-facultatiefexpression
Sort-Object
expression
ascending
/descending
-facultatief
Notitie
De waarde van de expression
waarde kan een scriptblok zijn in plaats van een hashtabel. Zie de sectie Notities voor meer informatie.
Hashtable-sleuteldefinities
name
/label
- Hiermee geeft u de naam van de eigenschap die wordt gemaakt. U kuntname
of de alias,label
door elkaar gebruiken.expression
- Een tekenreeks of scriptblok dat wordt gebruikt om de waarde van de nieuwe eigenschap te berekenen. Als hetexpression
een tekenreeks is, wordt de waarde geïnterpreteerd als een eigenschapsnaam voor het invoerobject. Dit is een kortere optie danexpression = { $_.<PropertyName> }
.alignment
- Wordt gebruikt door cmdlets die tabellaire uitvoer produceren om te definiëren hoe de waarden worden weergegeven in een kolom. De waarde moet'left'
,'center'
of'right'
.formatstring
- Hiermee geeft u een notatietekenreeks op die definieert hoe de waarde wordt opgemaakt voor uitvoer. Zie Indelingstypen in .NET voor meer informatie over opmaaktekenreeksen.width
- Hiermee geeft u de kolom maximale breedte in een tabel op wanneer de waarde wordt weergegeven. De waarde moet groter zijn dan0
.depth
- De parameter Diepte vanFormat-Custom
geeft de diepte van de uitbreiding voor alle eigenschappen. Metdepth
de sleutel kunt u de diepte van uitbreiding per eigenschap opgeven.ascending
/descending
- Hiermee kunt u de sorteervolgorde voor een of meer eigenschappen opgeven. Dit zijn booleaanse waarden.
U hoeft de hashtable-sleutels niet te spellen zolang het opgegeven naamvoorvoegsel ondubbelzinnig is. U kunt n
bijvoorbeeld in plaats van Name
en e
in plaats van Expression
.
Voorbeelden
Compare-Object
Met berekende eigenschappen kunt u bepalen hoe de eigenschappen van de invoerobjecten worden vergeleken. In dit voorbeeld worden de waarden vergeleken met het resultaat van de rekenkundige bewerking (modulus van 2) in plaats van de waarden rechtstreeks te vergelijken.
Compare-Object @{p=1} @{p=2} -property @{ Expression = { $_.p % 2 } }
$_.p % 2 SideIndicator
---------- -------------
0 =>
1 <=
ConvertTo-Html
ConvertTo-Html
kan een verzameling objecten converteren naar een HTML-tabel.
Met berekende eigenschappen kunt u bepalen hoe de tabel wordt weergegeven.
Get-Alias |
ConvertTo-Html Name,
Definition,
@{
name='ParameterCount'
expr={$_.Parameters.Keys.Count}
align='center'
} |
Out-File .\aliases.htm -Force
In dit voorbeeld wordt een HTML-tabel gemaakt met een lijst met PowerShell-aliassen en de getalparameters voor elke opdracht met aliassen. De waarden van de kolom ParameterCount zijn gecentreerd.
Format-Custom
Format-Custom
biedt een aangepaste weergave van een object in een indeling die vergelijkbaar is met een klassedefinitie. Complexere objecten kunnen leden bevatten die diep zijn genest met complexe typen. De parameter Diepte van Format-Custom
geeft de diepte van de uitbreiding voor alle eigenschappen op. Met depth
de sleutel kunt u de diepte van uitbreiding per eigenschap opgeven.
In dit voorbeeld vereenvoudigt de depth
sleutel de aangepaste uitvoer voor de Get-Date
cmdlet. Get-Date
retourneert een DateTime-object . De eigenschap Date van dit object is ook een DateTime-object , dus het object is genest.
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
In dit voorbeeld gebruiken we berekende eigenschappen om de naam en opmaak van de uitvoer te wijzigen.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
In dit voorbeeld wordt met de berekende eigenschap een eigenschap Type toegevoegd die wordt gebruikt om de bestanden te classificeren op basis van het inhoudstype.
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
Met Format-Wide
de cmdlet kunt u de waarde van één eigenschap voor objecten in een verzameling weergeven als een lijst met meerdere kolommen.
In dit voorbeeld willen we de bestandsnaam en de grootte (in kilobytes) zien als een brede lijst. Omdat Format-Wide
er niet meer dan één eigenschap wordt weergegeven, gebruiken we een berekende eigenschap om de waarde van twee eigenschappen te combineren tot één waarde.
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
De Group-Object
cmdlet geeft objecten weer in groepen op basis van de waarde van een opgegeven eigenschap. In dit voorbeeld telt de berekende eigenschap het aantal bestanden van elk inhoudstype.
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
De Measure-Object
cmdlet berekent de numerieke eigenschappen van objecten. In dit voorbeeld gebruiken we een berekende eigenschap om het aantal getallen tussen 1 en 10 op te halen dat gelijkmatig deelbaar is door 3.
Het scriptblok retourneert $true
als het getal deelbaar is door 3 en $false
voor alle andere getallen. De bewerking Som behandelt $true
waarden als 1
en $false
waarden als 0
.
1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
Count : 10
Average :
Sum : 3
Maximum :
Minimum :
StandardDeviation :
Property : ($_ % 3) -eq 0
Notitie
In tegenstelling tot de andere cmdlets accepteert Measure-Object
u geen hashtabel voor berekende eigenschappen. U moet een scriptblok gebruiken.
Select-Object
U kunt berekende eigenschappen gebruiken om extra leden toe te voegen aan de uitvoer van objecten met de Select-Object
cmdlet. In dit voorbeeld worden de PowerShell-aliassen vermeld die beginnen met de letter C
. Met behulp van Select-Object
, voeren we de alias uit, de cmdlet waaraan deze is toegewezen en een telling voor het aantal parameters dat is gedefinieerd voor de cmdlet. Met behulp van een berekende eigenschap kunnen we de eigenschap ParameterCount maken.
$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
Met behulp van de berekende eigenschappen kunt u gegevens in verschillende orders per eigenschap sorteren. In dit voorbeeld worden gegevens uit een CSV-bestand gesorteerd in oplopende volgorde op datum. Maar binnen elke datum worden de rijen in aflopende volgorde gesorteerd op Eenhedensold.
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
Opmerkingen
U kunt het scriptblok voor expressies rechtstreeks opgeven, als argument, in plaats van het op te geven als vermelding
Expression
in een hashtabel. Voorbeeld:'1', '10', '2' | Sort-Object { [int] $_ }
Dit voorbeeld is handig voor cmdlets die geen naam voor een eigenschap vereisen (of ondersteunen) via de
Name
sleutel, zoalsSort-Object
,Group-Object
enMeasure-Object
.Voor cmdlets die ondersteuning bieden voor de naamgeving van de eigenschap, wordt het scriptblok geconverteerd naar een tekenreeks en gebruikt als de naam van de eigenschap in de uitvoer.
Expression
scriptblokken worden uitgevoerd in onderliggende bereiken, wat betekent dat de variabelen van de aanroeper niet rechtstreeks kunnen worden gewijzigd.Pijplijnlogica wordt toegepast op de uitvoer van
Expression
scriptblokken. Dit betekent dat het uitvoeren van een matrix met één element ervoor zorgt dat de matrix wordt uitgepakt.Voor de meeste cmdlets worden fouten in expressiescriptblokken stil genegeerd. Voor fouten bij
Sort-Object
het beëindigen van instructies en scripts zijn uitvoerfouten , maar worden de instructie niet beëindigd.