Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 u nieuwe eigenschappen voor deze uitvoerobjecten kunt maken. U kunt deze parameters gebruiken om nieuwe, berekende eigenschappen te genereren voor uitvoerobjecten op basis van de waarden van invoerobjecten. Het invoerobject kan worden geopend met behulp van de $_ of $PSItem automatische variabele binnen het Expression lid een berekende eigenschap.
De berekende eigenschap wordt gedefinieerd als een hashtabel met sleutel-waardeparen die de waarde van de zojuist berekende eigenschap opgeven. Sommige opdrachten ondersteunen andere sleutel-waardeparen die bepalen hoe de eigenschap wordt weergegeven in de uitvoer.
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-ObjectExpression
ConvertTo-Html-
Name/Label- optioneel (toegevoegd in PowerShell 6.x) Expression-
Width- optioneel -
Alignment- optioneel
-
Format-CustomExpression-
Depth- optioneel
Format-List-
Name/Label- optioneel Expression-
FormatString- optioneel
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- optioneel Expression-
FormatString- optioneel -
Width- optioneel -
Alignment- optioneel
-
Format-WideExpression-
FormatString- optioneel
Group-ObjectExpression
Measure-Object- Ondersteunt alleen een scriptblok voor de expressie, niet een hashtabel.
- Niet ondersteund in PowerShell 5.1 en ouder.
Select-Object-
Name/Label- optioneel Expression
-
Sort-ObjectExpression-
Ascending/Descending- optioneel
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 op van de eigenschap die wordt gemaakt. U kuntNameof de alias,Label, door elkaar gebruiken. -
Expression- Een tekenreeks of scriptblok dat wordt gebruikt om de waarde van de nieuwe eigenschap te berekenen. Als deExpressioneen 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 bepalen hoe de waarden worden weergegeven in een kolom. De waarde moet'Left','Center'of'Right'zijn. -
FormatString- Hiermee geeft u een notatietekenreeks op die definieert hoe de waarde wordt opgemaakt voor uitvoer. Zie Indelingstypen in .NETvoor 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 Depth vanFormat-Customgeeft de uitbreidingsdiepte voor alle eigenschappen aan. Met deDepth-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 bijvoorbeeld n gebruiken 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 kunt 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 ParameterCount kolom 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 Depth van Format-Custom geeft de uitbreidingsdiepte voor alle eigenschappen aan. Met de Depth-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 van Get-ChildItemte 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 Type eigenschap toe 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 de cmdlet Format-Wide 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 weergeeft, 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 cmdlet Measure-Object 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 van 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 geen hashtabel voor berekende eigenschappen. U moet een scriptblock gebruiken.
Select-Object
U kunt berekende eigenschappen gebruiken om extra leden toe te voegen aan de uitvoer van objecten met de cmdlet Select-Object. In dit voorbeeld worden de PowerShell-aliassen vermeld die beginnen met de letter C. Met behulp van Select-Objectvoeren we de alias uit, de cmdlet waaraan deze is toegewezen en tellen we 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 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
Opmerkingen
U kunt het scriptblok voor expressies rechtstreeks opgeven, als argument, in plaats van deze op te geven als vermelding
Expressionin een hashtabel. Bijvoorbeeld:'1', '10', '2' | Sort-Object { [int] $_ }Dit voorbeeld is handig voor cmdlets die een eigenschap niet hoeven te benoemen (of ondersteunen) via de
Name-sleutel, zoalsSort-Object,Group-ObjectenMeasure-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.
Expressionscriptblokkeringen 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
Expressionscriptblokkeringen. 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 expressiescriptblocks stil genegeerd. Voor
Sort-Objectworden fouten bij het beëindigen van instructies en scripteinden uitvoer, maar worden de instructie niet beëindigd.