about_Calculated_Properties
Deskripsi singkat
PowerShell menyediakan kemampuan untuk menambahkan properti baru secara dinamis dan mengubah pemformatan output objek ke alur.
Deskripsi panjang
Beberapa cmdlet PowerShell mengubah, mengelompokkan, atau memproses objek input menjadi objek output menggunakan parameter yang memungkinkan penambahan properti baru ke objek output tersebut. Anda dapat menggunakan parameter ini untuk menghasilkan properti baru yang dihitung pada objek output berdasarkan nilai objek input. Properti terhitung ditentukan oleh hashtable yang berisi pasangan kunci-nilai yang menentukan nama properti baru, ekspresi untuk menghitung nilai, dan informasi pemformatan opsional.
Cmdlet yang didukung
Cmdlet berikut mendukung nilai properti terhitung untuk parameter Properti . Format-*
Cmdlet juga mendukung nilai terhitung untuk parameter GroupBy.
Daftar berikut menguraikan cmdlet yang mendukung properti terhitung dan pasangan kunci-nilai yang didukung setiap cmdlet.
Compare-Object
expression
ConvertTo-Html
name
/label
- opsional (ditambahkan di PowerShell 6.x)expression
width
-fakultatifalignment
-fakultatif
Format-Custom
expression
depth
-fakultatif
Format-List
name
/label
-fakultatifexpression
formatstring
-fakultatif
Set pasangan kunci-nilai yang sama ini juga berlaku untuk nilai properti terhitung yang diteruskan ke parameter GroupBy untuk semua
Format-*
cmdlet.Format-Table
name
/label
-fakultatifexpression
formatstring
-fakultatifwidth
-fakultatifalignment
-fakultatif
Format-Wide
expression
formatstring
-fakultatif
Group-Object
expression
Measure-Object
- Hanya mendukung blok skrip untuk ekspresi, bukan hashtable.
- Tidak didukung di PowerShell 5.1 dan yang lebih lama.
Select-Object
name
/label
-fakultatifexpression
Sort-Object
expression
ascending
/descending
-fakultatif
Catatan
Nilai expression
dapat menjadi blok skrip alih-alih hashtable. Untuk informasi selengkapnya, lihat bagian Catatan.
Definisi kunci hashtable
name
/label
- Menentukan nama properti yang sedang dibuat. Anda dapat menggunakanname
atau aliasnya,label
, secara bergantian.expression
- String atau blok skrip yang digunakan untuk menghitung nilai properti baru.expression
Jika adalah string, nilai ditafsirkan sebagai nama properti pada objek input. Ini adalah opsi yang lebih pendek daripadaexpression = { $_.<PropertyName> }
.alignment
- Digunakan oleh cmdlet yang menghasilkan output tabular untuk menentukan bagaimana nilai ditampilkan dalam kolom. Nilainya harus'left'
,'center'
, atau'right'
.formatstring
- Menentukan string format yang menentukan bagaimana nilai diformat untuk output. Untuk informasi selengkapnya tentang string format, lihat Jenis format di .NET.width
- Menentukan kolom lebar maksimum dalam tabel saat nilai ditampilkan. Nilai harus lebih besar dari0
.depth
- Parameter KedalamanFormat-Custom
menentukan kedalaman ekspansi untuk semua properti. Kunci memungkinkandepth
Anda menentukan kedalaman ekspansi per properti.ascending
/descending
- Memungkinkan Anda menentukan urutan pengurutan untuk satu atau beberapa properti. Ini adalah nilai boolean.
Anda tidak perlu mengeja kunci yang dapat di-hash selama awalan nama yang ditentukan tidak ambigu. Misalnya, Anda dapat menggunakan n
alih-alih Name
dan e
bukan Expression
.
Contoh
Compare-Object
Dengan properti terhitung, Anda dapat mengontrol bagaimana properti objek input dibandingkan. Dalam contoh ini, daripada membandingkan nilai secara langsung, nilai dibandingkan dengan hasil operasi aritmatika (modulus 2).
Compare-Object @{p=1} @{p=2} -property @{ Expression = { $_.p % 2 } }
$_.p % 2 SideIndicator
---------- -------------
0 =>
1 <=
ConvertTo-Html
ConvertTo-Html
dapat mengonversi kumpulan objek ke tabel HTML.
Properti terhitung memungkinkan Anda mengontrol bagaimana tabel disajikan.
Get-Alias |
ConvertTo-Html Name,
Definition,
@{
name='ParameterCount'
expr={$_.Parameters.Keys.Count}
align='center'
} |
Out-File .\aliases.htm -Force
Contoh ini membuat tabel HTML yang berisi daftar alias PowerShell dan parameter angka untuk setiap perintah alias. Nilai kolom ParameterCount dipusatkan.
Format-Custom
Format-Custom
menyediakan tampilan kustom objek dalam format yang mirip dengan definisi kelas. Objek yang lebih kompleks dapat berisi anggota yang sangat bersarang dengan jenis kompleks. Parameter Kedalaman Format-Custom
menentukan kedalaman ekspansi untuk semua properti. Kunci memungkinkan depth
Anda menentukan kedalaman ekspansi per properti.
Dalam contoh ini, kunci depth
menyederhanakan output kustom untuk Get-Date
cmdlet. Get-Date
mengembalikan objek DateTime. Properti Tanggal objek ini juga merupakan objek DateTime , sehingga objek disarangkan.
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
Dalam contoh ini, kami menggunakan properti terhitung untuk mengubah nama dan format output dari 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
Dalam contoh ini, properti terhitung menambahkan properti Jenis yang digunakan untuk mengklasifikasikan file menurut jenis konten.
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
Format-Wide
Cmdlet memungkinkan Anda menampilkan nilai satu properti untuk objek dalam koleksi sebagai daftar multi-kolom.
Untuk contoh ini, kita ingin melihat nama file dan ukuran (dalam kilobyte) sebagai daftar yang luas. Karena Format-Wide
tidak menampilkan lebih dari satu properti, kami menggunakan properti terhitung untuk menggabungkan nilai dua properti ke dalam satu nilai.
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
Group-Object
Cmdlet menampilkan objek dalam grup berdasarkan nilai properti tertentu. Dalam contoh ini, properti terhitung menghitung jumlah file dari setiap jenis konten.
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
Measure-Object
Cmdlet menghitung properti numerik objek. Dalam contoh ini, kita menggunakan properti terhitung untuk mendapatkan hitungan angka antara 1 dan 10 yang dapat dibagi secara merata dengan 3.
Blok skrip mengembalikan $true
jika angka dapat dibagi 3 dan $false
untuk semua angka lainnya. Operasi Jumlah memperlakukan $true
nilai sebagai 1
dan $false
nilai sebagai 0
.
1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
Count : 10
Average :
Sum : 3
Maximum :
Minimum :
StandardDeviation :
Property : ($_ % 3) -eq 0
Catatan
Tidak seperti cmdlet lainnya, Measure-Object
tidak menerima hashtable untuk properti terhitung. Anda harus menggunakan blok skrip.
Select-Object
Anda dapat menggunakan properti terhitung untuk menambahkan anggota tambahan ke output objek dengan Select-Object
cmdlet. Dalam contoh ini, kami mencantumkan alias PowerShell yang dimulai dengan huruf C
. Menggunakan Select-Object
, kami mengeluarkan alias, cmdlet yang dipetakan, dan hitungan untuk jumlah parameter yang ditentukan untuk cmdlet. Dengan menggunakan properti terhitung, kita dapat membuat properti 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
Dengan menggunakan properti terhitung, Anda dapat mengurutkan data dalam urutan yang berbeda per properti. Contoh ini mengurutkan data dari file CSV dalam urutan naik menurut Tanggal. Tetapi dalam setiap tanggal, ia mengurutkan baris dalam urutan menurun menurut UnitSold.
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
Catatan
Anda dapat menentukan blok skrip ekspresi secara langsung, sebagai argumen, daripada menentukannya sebagai
Expression
entri dalam hashtable. Contohnya:'1', '10', '2' | Sort-Object { [int] $_ }
Contoh ini nyaman untuk cmdlet yang tidak memerlukan (atau dukungan) penamaan properti melalui
Name
kunci, sepertiSort-Object
,Group-Object
, danMeasure-Object
.Untuk cmdlet yang mendukung penamaan properti, blok skrip dikonversi ke string dan digunakan sebagai nama properti dalam output.
Expression
Blok skrip berjalan dalam cakupan anak , yang berarti bahwa variabel pemanggil tidak dapat dimodifikasi secara langsung.Logika alur diterapkan ke output dari
Expression
blok skrip. Ini berarti bahwa menghasilkan array elemen tunggal menyebabkan array tersebut dibongkar.Untuk sebagian besar cmdlet, kesalahan di dalam blok skrip ekspresi diabaikan dengan diam-diam. Untuk
Sort-Object
kesalahan , penghentian pernyataan dan penghentian skrip adalah output tetapi tidak mengakhiri pernyataan.