about_Calculated_Properties
Krótki opis
Program PowerShell umożliwia dynamiczne dodawanie nowych właściwości i zmienianie formatowania obiektów wyjściowych do potoku.
Długi opis
Kilka poleceń cmdlet programu PowerShell przekształca, grupuje lub przetwarza obiekty wejściowe w obiekty wyjściowe przy użyciu parametrów, które umożliwiają dodawanie nowych właściwości do tych obiektów wyjściowych. Tych parametrów można użyć do generowania nowych, obliczanych właściwości na obiektach wyjściowych na podstawie wartości obiektów wejściowych. Właściwość obliczeniowa jest definiowana przez tabelę skrótową zawierającą pary klucz-wartość, które określają nazwę nowej właściwości, wyrażenie do obliczenia wartości i opcjonalne informacje o formatowaniu.
Obsługiwane polecenia cmdlet
Następujące polecenia cmdlet obsługują wartości właściwości obliczeniowej dla parametru Właściwość . Polecenia Format-*
cmdlet obsługują również wartości obliczeniowe dla parametru GroupBy .
Poniższa lista określa polecenia cmdlet obsługujące właściwości obliczeniowe i pary klucz-wartość obsługiwane przez każde polecenie cmdlet.
Compare-Object
expression
ConvertTo-Html
name
/label
— opcjonalne (dodane w programie PowerShell 6.x)expression
width
-fakultatywnyalignment
-fakultatywny
Format-Custom
expression
depth
-fakultatywny
Format-List
name
/label
-fakultatywnyexpression
formatstring
-fakultatywny
Ten sam zestaw par klucz-wartość ma również zastosowanie do wartości właściwości obliczeniowych przekazywanych do parametru GroupBy dla wszystkich
Format-*
poleceń cmdlet.Format-Table
name
/label
-fakultatywnyexpression
formatstring
-fakultatywnywidth
-fakultatywnyalignment
-fakultatywny
Format-Wide
expression
formatstring
-fakultatywny
Group-Object
expression
Measure-Object
- Obsługuje tylko blok skryptu dla wyrażenia, a nie tabelę skrótu.
- Nieobsługiwane w programie PowerShell 5.1 lub starszym.
Select-Object
name
/label
-fakultatywnyexpression
Sort-Object
expression
ascending
/descending
-fakultatywny
Uwaga
Wartość expression
elementu może być blokiem skryptu zamiast tabeli skrótu. Aby uzyskać więcej informacji, zobacz sekcję Uwagi .
Definicje kluczy tabeli skrótów
name
/label
- Określa nazwę tworzonej właściwości. Można użyćname
lub jego aliasu,label
, zamiennie.expression
- Ciąg lub blok skryptu używany do obliczania wartości nowej właściwości.expression
Jeśli parametr jest ciągiem, wartość jest interpretowana jako nazwa właściwości obiektu wejściowego. Jest to krótsza opcja niżexpression = { $_.<PropertyName> }
.alignment
— Używane przez polecenia cmdlet, które generują tabelaryczne dane wyjściowe, aby zdefiniować sposób wyświetlania wartości w kolumnie. Wartość musi mieć'left'
wartość ,'center'
lub'right'
.formatstring
- Określa ciąg formatu, który definiuje sposób formatowania wartości dla danych wyjściowych. Aby uzyskać więcej informacji na temat ciągów formatu, zobacz Format types in .NET (Typy formatów na platformie .NET).width
- Określa maksymalną szerokość kolumny w tabeli, gdy wartość jest wyświetlana. Wartość musi być większa niż0
.depth
- ParametrFormat-Custom
Głębokość określa głębokość rozszerzenia dla wszystkich właściwości. Kluczdepth
umożliwia określenie głębokości rozszerzenia dla właściwości.ascending
/descending
— Umożliwia określenie kolejności sortowania dla co najmniej jednej właściwości. Są to wartości logiczne.
Nie musisz określać kluczy tabeli skrótu, o ile określony prefiks nazwy jest jednoznaczny. Można na przykład użyć n
zamiast Name
i e
zamiast Expression
.
Przykłady
Compare-Object
Za pomocą właściwości obliczeniowych można kontrolować sposób porównywania właściwości obiektów wejściowych. W tym przykładzie zamiast porównywać wartości bezpośrednio, wartości są porównywane z wynikiem operacji arytmetycznej (modulus 2).
Compare-Object @{p=1} @{p=2} -property @{ Expression = { $_.p % 2 } }
$_.p % 2 SideIndicator
---------- -------------
0 =>
1 <=
ConvertTo-Html
ConvertTo-Html
może przekonwertować kolekcję obiektów na tabelę HTML.
Właściwości obliczeniowe umożliwiają kontrolowanie sposobu prezentowania tabeli.
Get-Alias |
ConvertTo-Html Name,
Definition,
@{
name='ParameterCount'
expr={$_.Parameters.Keys.Count}
align='center'
} |
Out-File .\aliases.htm -Force
W tym przykładzie jest tworzona tabela HTML zawierająca listę aliasów programu PowerShell i parametry liczbowe dla każdego aliasowanego polecenia. Wartości kolumny ParameterCount są wyśrodkowane.
Format-Custom
Format-Custom
Udostępnia niestandardowy widok obiektu w formacie podobnym do definicji klasy. Bardziej złożone obiekty mogą zawierać elementy członkowskie, które są głęboko zagnieżdżone z typami złożonymi. Parametr Głębokość parametru Format-Custom
określa głębokość rozszerzenia dla wszystkich właściwości. Klucz depth
umożliwia określenie głębokości rozszerzenia dla właściwości.
W tym przykładzie depth
klucz upraszcza niestandardowe dane wyjściowe polecenia Get-Date
cmdlet. Get-Date
zwraca obiekt DateTime. Właściwość Date tego obiektu jest również obiektem DateTime , więc obiekt jest zagnieżdżony.
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
W tym przykładzie użyjemy właściwości obliczeniowych, aby zmienić nazwę i format danych wyjściowych 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
W tym przykładzie właściwość obliczeniowa dodaje właściwość Type służącą do klasyfikowania plików według typu zawartości.
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
Polecenie Format-Wide
cmdlet umożliwia wyświetlanie wartości jednej właściwości dla obiektów w kolekcji jako listy z wieloma kolumnami.
W tym przykładzie chcemy zobaczyć nazwę pliku i rozmiar (w kilobajtach) jako szeroką listę. Ponieważ Format-Wide
nie wyświetla więcej niż jednej właściwości, używamy właściwości obliczeniowej, aby połączyć wartość dwóch właściwości w jedną wartość.
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
Polecenie Group-Object
cmdlet wyświetla obiekty w grupach na podstawie wartości określonej właściwości. W tym przykładzie właściwość obliczeniowa zlicza liczbę plików każdego typu zawartości.
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
Polecenie Measure-Object
cmdlet oblicza właściwości liczbowe obiektów. W tym przykładzie używamy właściwości obliczeniowej, aby uzyskać liczbę liczb z zakresu od 1 do 10, które są równomiernie podzielne przez 3.
Blok skryptu zwraca $true
wartość, jeśli liczba jest podzielna przez 3 i $false
dla wszystkich pozostałych liczb. Operacja Sum traktuje $true
wartości jako 1
wartości i $false
jako 0
.
1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
Count : 10
Average :
Sum : 3
Maximum :
Minimum :
StandardDeviation :
Property : ($_ % 3) -eq 0
Uwaga
W przeciwieństwie do innych poleceń cmdlet, Measure-Object
nie akceptuje tabeli skrótu dla właściwości obliczeniowych. Należy użyć bloku skryptu.
Select-Object
Możesz użyć właściwości obliczeniowych, aby dodać dodatkowe elementy członkowskie do danych wyjściowych obiektów za Select-Object
pomocą polecenia cmdlet . W tym przykładzie wyświetlamy aliasy programu PowerShell rozpoczynające się literą C
. Przy użyciu polecenia Select-Object
zwracamy alias, polecenie cmdlet, do których jest mapowane, oraz liczbę parametrów zdefiniowanych dla polecenia cmdlet. Za pomocą właściwości obliczeniowej możemy utworzyć właściwość 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
Za pomocą właściwości obliczeniowych można sortować dane w różnych zamówieniach na właściwość. W tym przykładzie dane są sortowane z pliku CSV w kolejności rosnącej według daty. Jednak w każdej dacie wiersze są sortowane w kolejności malejącej według wartości 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
Uwagi
Blok skryptu wyrażenia można określić bezpośrednio jako argument, zamiast określać go jako
Expression
wpis w tabeli skrótu. Na przykład:'1', '10', '2' | Sort-Object { [int] $_ }
Ten przykład jest wygodny w przypadku poleceń cmdlet, które nie wymagają (lub obsługi) nazewnictwa właściwości za pośrednictwem
Name
klucza, takiego jakSort-Object
,Group-Object
iMeasure-Object
.W przypadku poleceń cmdlet obsługujących nazewnictwo właściwości blok skryptu jest konwertowany na ciąg i używany jako nazwa właściwości w danych wyjściowych.
Expression
bloki skryptu są uruchamiane w zakresach podrzędnych , co oznacza, że zmienne obiektu wywołującego nie mogą być modyfikowane bezpośrednio.Logika potoku jest stosowana do danych wyjściowych z
Expression
bloków skryptu. Oznacza to, że wyprowadzanie tablicy z jednym elementem powoduje, że tablica zostanie rozpasana.W przypadku większości poleceń cmdlet błędy wewnątrz bloków skryptów wyrażeń są po cichu ignorowane. W przypadku
Sort-Object
instrukcji błędy zakończenia instrukcji i zakończenia skryptu są danymi wyjściowymi , ale nie kończą instrukcji .