about_Calculated_Properties
Korte beschrijving
PowerShell biedt de mogelijkheid om dynamisch nieuwe eigenschappen toe te voegen en de opmaak van objectuitvoer naar de pijplijn te wijzigen.
Lange beschrijving
Met verschillende PowerShell-cmdlets worden invoerobjecten getransformeerd, gegroepeerd of verwerkt in uitvoerobjecten met behulp van parameters waarmee nieuwe eigenschappen aan deze uitvoerobjecten kunnen worden toegevoegd. U kunt deze parameters gebruiken om nieuwe, berekende eigenschappen voor uitvoerobjecten te genereren 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 om de waarde te berekenen 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 berekende eigenschappen ondersteunen 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
-Optionelealignment
-Optionele
Format-Custom
expression
depth
-Optionele
Format-List
name
/label
-Optioneleexpression
formatstring
-Optionele
Dezelfde set sleutel-waardeparen is ook van toepassing op berekende eigenschapswaarden die worden doorgegeven aan de parameter GroupBy voor alle
Format-*
cmdlets.Format-Table
name
/label
-Optioneleexpression
formatstring
-Optionelewidth
-Optionelealignment
-Optionele
Format-Wide
expression
formatstring
-Optionele
Group-Object
expression
Measure-Object
- Ondersteunt alleen een scriptblok voor de expressie, niet een hashtable.
- Niet ondersteund in PowerShell 5.1 en ouder.
Select-Object
name
/label
-Optioneleexpression
Sort-Object
expression
ascending
/descending
-Optionele
Notitie
De waarde van de expression
kan een scriptblok zijn in plaats van een hashtabel. Zie de sectie Notities voor meer informatie.
Hashtabelsleuteldefinities
name
/label
- Hiermee geeft u de naam van de eigenschap die wordt gemaakt. U kunt of de alias ,label
door elkaar gebruikenname
.expression
- Een tekenreeks of scriptblok dat wordt gebruikt om de waarde van de nieuwe eigenschap te berekenen. Als deexpression
een tekenreeks is, wordt de waarde geïnterpreteerd als een eigenschapsnaam op het invoerobject. Dit is een kortere optie danexpression = { $_.<PropertyName> }
.alignment
- Wordt gebruikt door cmdlets die uitvoer in tabelvorm produceren om te definiëren hoe de waarden worden weergegeven in een kolom. De waarde moet ,'center'
of'right'
zijn'left'
.formatstring
- Hiermee geeft u een notatietekenreeks op die definieert hoe de waarde wordt opgemaakt voor uitvoer. Zie Opmaaktypen in .NET voor meer informatie over opmaaktekenreeksen.width
- Hiermee geeft u de kolom met de 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 op. Met dedepth
sleutel kunt u de diepte van de uitbreiding per eigenschap opgeven.ascending
/descending
- Hiermee kunt u de sorteervolgorde opgeven voor een of meer eigenschappen. Dit zijn booleaanse waarden.
U hoeft de hashtabelsleutels niet te spellen zolang het opgegeven naamvoorvoegsel ondubbelzinnig is. U kunt bijvoorbeeld in plaats van en gebruiken n
in plaats van Expression
.e
Name
Voorbeelden
Compare-Object
Met berekende eigenschappen kunt u bepalen hoe de eigenschappen van de invoerobjecten worden vergeleken. In dit voorbeeld worden de waarden niet rechtstreeks vergeleken, maar vergeleken met het resultaat van de rekenkundige bewerking (modulus van 2).
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 aliasopdracht. 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 uitbreidingsdiepte voor alle eigenschappen op. Met de depth
sleutel kunt u de diepte van de 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 indeling van de uitvoer van Get-ChildItem
te wijzigen.
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 voegt de berekende eigenschap een eigenschap Type toe die wordt gebruikt om de bestanden te classificeren op 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
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 in groepen weer op basis van de waarde van een opgegeven eigenschap. In dit voorbeeld wordt met de berekende eigenschap het aantal bestanden van elk inhoudstype geteld.
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 (som) op te halen van de getallen, tussen 1 en 10, die gelijkmatig deelbaar zijn door 3.
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
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 objectuitvoer met de Select-Object
cmdlet. In dit voorbeeld vermelden we de PowerShell-aliassen 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 volgordes per eigenschap sorteren. In dit voorbeeld worden gegevens uit een CSV-bestand in oplopende volgorde gesorteerd op datum. Maar binnen elke datum worden de rijen in aflopende volgorde gesorteerd op 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
Notities
U kunt het expressiescriptblok rechtstreeks als argument opgeven in plaats van het op te geven als de
Expression
vermelding in een hashtabel. Bijvoorbeeld:'1', '10', '2' | Sort-Object { [int] $_ }
Dit voorbeeld is handig voor cmdlets waarvoor geen naamgeving van een eigenschap via de
Name
sleutel is vereist (of wordt ondersteund), 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 die matrix wordt uitgepakt.Voor de meeste cmdlets worden fouten in expressiescriptblokken op de achtergrond genegeerd. Voor
Sort-Object
zijn instructie- en scriptbeëindigingsfouten uitvoer , maar de instructie wordt niet beëindigd.