about_Calculated_Properties
Kısa açıklama
PowerShell, dinamik olarak yeni özellikler ekleme ve işlem hattına nesne çıkışının biçimlendirmesini değiştirme olanağı sağlar.
Uzun açıklama
Çeşitli PowerShell cmdlet'leri, bu çıkış nesnelerine yeni özelliklerin eklenmesine izin veren parametreleri kullanarak giriş nesnelerini çıkış nesnelerine dönüştürür, gruplandırır veya işler. Giriş nesnelerinin değerlerine göre çıkış nesnelerinde yeni, hesaplanan özellikler oluşturmak için bu parametreleri kullanabilirsiniz. Hesaplanan özellik, yeni özelliğin adını, değeri hesaplamak için bir ifadeyi ve isteğe bağlı biçimlendirme bilgilerini belirten anahtar-değer çiftlerini içeren bir karma tablo tarafından tanımlanır.
Desteklenen cmdlet'ler
Aşağıdaki cmdlet'ler Property parametresi için hesaplanan özellik değerlerini destekler. Cmdlet'ler Format-*
GroupBy parametresi için hesaplanan değerleri de destekler.
Aşağıdaki liste, hesaplanan özellikleri destekleyen cmdlet'leri ve her cmdlet'in desteklediği anahtar-değer çiftlerini listeler.
Compare-Object
expression
ConvertTo-Html
name
/label
- isteğe bağlı (PowerShell 6.x'e eklendi)expression
width
-Isteğe bağlıalignment
-Isteğe bağlı
Format-Custom
expression
depth
-Isteğe bağlı
Format-List
name
/label
-Isteğe bağlıexpression
formatstring
-Isteğe bağlı
Aynı anahtar-değer çiftleri kümesi, tüm
Format-*
cmdlet'ler için GroupBy parametresine geçirilen hesaplanan özellik değerleri için de geçerlidir.Format-Table
name
/label
-Isteğe bağlıexpression
formatstring
-Isteğe bağlıwidth
-Isteğe bağlıalignment
-Isteğe bağlı
Format-Wide
expression
formatstring
-Isteğe bağlı
Group-Object
expression
Measure-Object
- Karma tablo için değil yalnızca ifade için bir betik bloğunu destekler.
- PowerShell 5.1 ve daha eski sürümlerinde desteklenmez.
Select-Object
name
/label
-Isteğe bağlıexpression
Sort-Object
expression
ascending
/descending
-Isteğe bağlı
Not
değerinin expression
değeri, karma tablo yerine bir betik bloğu olabilir. Daha fazla bilgi için Notlar bölümüne bakın.
Hashtable anahtar tanımları
name
/label
- Oluşturulan özelliğin adını belirtir. veya diğer adınılabel
, birbirinin yerine kullanabilirsinizname
.expression
- Yeni özelliğin değerini hesaplamak için kullanılan dize veya betik bloğu.expression
bir dizeyse, değer giriş nesnesinde özellik adı olarak yorumlanır. Bu, değerindenexpression = { $_.<PropertyName> }
daha kısa bir seçenektir.alignment
- Değerlerin bir sütunda nasıl görüntüleneceğini tanımlamak için tablosal çıkış üreten cmdlet'ler tarafından kullanılır. Değer ,'center'
veya'right'
olmalıdır'left'
.formatstring
- Değerin çıkış için nasıl biçimlendirildiğini tanımlayan bir biçim dizesi belirtir. Biçim dizeleri hakkında daha fazla bilgi için bkz . .NET'te biçim türleri.width
- Değer görüntülendiğinde tablodaki en büyük genişlik sütununu belirtir. Değer değerinden0
büyük olmalıdır.depth
- Depth parametresiFormat-Custom
, tüm özellikler için genişletme derinliğini belirtir. anahtarı,depth
özellik başına genişletme derinliğini belirtmenize olanak tanır.ascending
/descending
- Bir veya daha fazla özellik için sıralama sırasını belirtmenize olanak tanır. Bunlar boole değerleridir.
Belirtilen ad ön eki belirsiz olduğu sürece karma tablo anahtarlarını yazmanız gerekmez. Örneğin, yerine Name
ve e
Expression
kullanabilirsinizn
.
Örnekler
Compare-Object
Hesaplanmış özelliklerle, giriş nesnelerinin özelliklerinin nasıl karşılaştırıldığından denetleyebilirsiniz. Bu örnekte, değerleri doğrudan karşılaştırmak yerine, değerler aritmetik işlemin sonucuyla karşılaştırılır (2 modülü).
Compare-Object @{p=1} @{p=2} -property @{ Expression = { $_.p % 2 } }
$_.p % 2 SideIndicator
---------- -------------
0 =>
1 <=
ConvertTo-Html
ConvertTo-Html
bir nesne koleksiyonunu HTML tablosuna dönüştürebilir.
Hesaplanmış özellikler, tablonun nasıl sunulduğunu denetlemenize olanak sağlar.
Get-Alias |
ConvertTo-Html Name,
Definition,
@{
name='ParameterCount'
expr={$_.Parameters.Keys.Count}
align='center'
} |
Out-File .\aliases.htm -Force
Bu örnek, PowerShell diğer adlarının listesini ve diğer ad kullanılan her komutun sayı parametrelerini içeren bir HTML tablosu oluşturur. ParameterCount sütununun değerleri ortalanır.
Format-Custom
Format-Custom
bir nesnenin sınıf tanımına benzer biçimde özel bir görünümünü sağlar. Daha karmaşık nesneler, karmaşık türlerle iç içe yerleştirilmiş üyeler içerebilir. parametresi, Format-Custom
tüm özellikler için genişletme derinliğini belirtir. anahtarı, depth
özellik başına genişletme derinliğini belirtmenize olanak tanır.
Bu örnekte anahtar, depth
cmdlet için Get-Date
özel çıkışı basitleştirir. Get-Date
bir DateTime nesnesi döndürür. Bu nesnenin Date özelliği de bir DateTime nesnesi olduğundan, nesne iç içe yerleştirilmiştir.
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
Bu örnekte, çıktının adını ve biçimini Get-ChildItem
değiştirmek için hesaplanan özellikleri kullanırız.
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
Bu örnekte hesaplanan özellik, dosyaları içerik türüne göre sınıflandırmak için kullanılan bir Type özelliği ekler.
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
cmdlet'i Format-Wide
, bir koleksiyondaki nesneler için bir özelliğin değerini çok sütunlu liste olarak görüntülemenizi sağlar.
Bu örnekte, dosya adını ve boyutunu (kilobayt cinsinden) geniş bir liste olarak görmek istiyoruz. Format-Wide
Birden fazla özellik görüntülemediğinden, iki özelliğin değerini tek bir değerde birleştirmek için hesaplanan bir özellik kullanırız.
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
Cmdlet, Group-Object
nesneleri belirtilen özelliğin değerine göre gruplar halinde görüntüler. Bu örnekte, hesaplanan özellik her içerik türünün dosya sayısını sayar.
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
cmdlet'i Measure-Object
nesnelerin sayısal özelliklerini hesaplar. Bu örnekte, 1 ile 10 arasında olan ve 3 ile eşit olarak bölünebilen sayıların sayısını (Toplam) almak için hesaplanan bir özellik kullanırız.
1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum
Count : 10
Average :
Sum : 3
Maximum :
Minimum :
StandardDeviation :
Property : ($_ % 3) -eq 0
Not
Diğer cmdlet'lerin aksine, Measure-Object
hesaplanan özellikler için bir karma tablo kabul etmez. Bir betik bloğu kullanmanız gerekir.
Select-Object
Cmdlet'iyle Select-Object
nesne çıkışına ek üyeler eklemek için hesaplanan özellikleri kullanabilirsiniz. Bu örnekte, harfiyle C
başlayan PowerShell diğer adlarını listeleyeceğiz. kullanarak Select-Object
diğer adı, eşlendiği cmdlet'i ve cmdlet için tanımlanan parametre sayısını veririz. Hesaplanan bir özellik kullanarak ParameterCount özelliğini oluşturabiliriz.
$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
Hesaplanmış özellikleri kullanarak, verileri özellik başına farklı siparişlerde sıralayabilirsiniz. Bu örnek, CSV dosyasındaki verileri Tarihe göre artan düzende sıralar. Ancak her tarih içinde satırları UnitsSold değerine göre azalan düzende sıralar.
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
Notlar
İfade betiği bloğunu bir karma tablodaki girdi olarak belirtmek yerine doğrudan bağımsız değişken olarak
Expression
belirtebilirsiniz. Örneğin:'1', '10', '2' | Sort-Object { [int] $_ }
Bu örnek, bir özelliği anahtar aracılığıyla
Name
adlandırmayı gerektirmeyen (veya desteklemeyen) cmdlet'ler için kullanışlıdır; örneğinSort-Object
, ,Group-Object
veMeasure-Object
.Özelliği adlandırmayı destekleyen cmdlet'ler için betik bloğu bir dizeye dönüştürülür ve çıktıda özelliğin adı olarak kullanılır.
Expression
betik blokları alt kapsamlarda çalıştırılır, yani çağıranın değişkenleri doğrudan değiştirilemez.komut dosyası bloklarından
Expression
çıkışa işlem hattı mantığı uygulanır. Bu, tek öğeli bir dizi çıkışının bu dizinin eşlenmemiş olmasına neden olduğu anlamına gelir.Çoğu cmdlet için ifade betiği blokları içindeki hatalar sessizce yoksayılır. için
Sort-Object
deyimini sonlandırma ve betik sonlandırma hataları çıkıştır ancak deyimini sonlandırmaz.
Ayrıca bkz.
PowerShell
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin