Hesaplanan Özellikler hakkında
Kısa açıklama
PowerShell, dinamik olarak yeni özellikler ekleme ve nesnelerin çıktısının ardışık düzene biçimlendirmesini değiştirme olanağı sağlar.
Uzun açıklama
Birkaç PowerShell cmdlet'i, giriş nesnelerini, bu çıkış nesnelerine yeni özelliklerin eklenmesine izin veren parametreleri kullanarak çıkış nesnelerine dönüştürür, gruplandırır veya işler. Giriş nesnelerinin değerlerine dayalı olarak çıktı nesnelerinde yeni, hesaplanmış özellikler oluşturmak için bu parametreleri kullanabilirsiniz. Hesaplanan özellik, yeni özelliğin adını belirten anahtar/değer çiftlerini, değeri hesaplamak için bir ifadeyi ve isteğe bağlı biçimlendirme bilgilerini içeren bir karma tablosuyla tanımlanır.
Desteklenen cmdlet'ler
Aşağıdaki cmdlet'ler Property parametresi için hesaplanan özellik değerlerini destekler. Format-* cmdlet'leri ayrıca 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.
Nesneyi Karşılaştırexpression
Html'ye Dönüştür
ad/etiket- isteğe bağlı (PowerShell 6.x'te eklenmiştir)
expressiongenişlik - isteğe bağlıhizalama - isteğe bağlıBiçim-Özel
expressionderinlik - isteğe bağlıBiçim Listesi
ad/ etiket - isteğe bağlı
expressionformatstring - isteğe bağlıAynı anahtar/değer çiftleri kümesi, tüm Format-* cmdlet'leri için GroupBy parametresine iletilen hesaplanmış özellik değerleri için de geçerlidir.
Biçim Tablosu
ad/ etiket - isteğe bağlı
expressionformatstring - isteğe bağlıgenişlik - isteğe bağlıhizalama - isteğe bağlıBiçim Genelinde
expressionformatstring - isteğe bağlıGrup-Nesne
expressionÖlçü Nesnesi
- Bir karma tablosunu değil, yalnızca ifade için bir komut dosyası bloğunu destekler.
Nesne Seç
ad/ etiket - isteğe bağlı
expressionNesneyi Sırala
expressionartan/azalan - isteğe bağlıNot
ifade'nin değeri karma tablosu yerine bir komut dosyası bloğu olabilir. Daha fazla bilgi için Notlar bölümüne bakın.
Hashtable anahtar tanımları
ad/etiket- Oluşturulmakta olan özelliğin adını belirtir.nameveya onun takma adı olanlabel'ı birbirinin yerine kullanabilirsiniz.ifade- Yeni özelliğin değerini hesaplamak için kullanılan bir dize veya komut dosyası bloğu.ifadebir dize ise değer, giriş nesnesindeki bir özellik adı olarak yorumlanır. Bu,expression={ $_.seçeneğinden daha kısa bir seçenektir.hizalama- Değerlerin bir sütunda nasıl görüntüleneceğini tanımlamak için tablo halinde çıktı üreten cmdlet'ler tarafından kullanılır. Değer'left','center'veya'right'olmalıdır.formatstring- Değerin çıktı için nasıl biçimlendirileceğini tanımlayan bir biçim dizesini 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 maksimum genişlik sütununu belirtir. Değer0'dan büyük olmalıdır.derinlik-Format-Custom'un Derinlik parametresi, tüm özellikler için genişletme derinliğini belirtir.derinliktuşu, özellik başına genişletme derinliğini belirtmenize olanak tanır.artan/azalan- Bir veya daha fazla özellik için sıralama sırasını belirtmenize olanak tanır. Bunlar boole değerleridir.
Belirtilen ad öneki net olduğu sürece karma tablosu anahtarlarını hecelemenize gerek yoktur. Örneğin, Ad yerine n ve İfade yerine e kullanabilirsiniz.
Örnekler
Compare-Object
Hesaplanan özelliklerle, giriş nesnelerinin özelliklerinin nasıl karşılaştırılacağını kontrol edebilirsiniz. Bu örnekte, değerleri doğrudan karşılaştırmak yerine, değerler aritmetik işlemin sonucuyla (modül 2) karşılaştırılır.
Compare-Object @{p=1} @{p=2} -property @{ Expression = { $_.p % 2 } }
$_.p % 2 SideIndicator
---------- -------------
0 =>
1 <=
ConvertTo-Html
ConvertTo-Html, bir nesne koleksiyonunu bir HTML tablosuna dönüştürebilir. Hesaplanan özellikler, tablonun nasıl sunulacağını kontrol etmenize olanak tanır.
Get-Alias |
ConvertTo-Html Name,
Definition,
@{
name='ParameterCount'
expr={$_.Parameters.Keys.Count}
align='center'
} |
Out-File .\aliases.htm -Force
Bu örnek, PowerShell takma adlarının listesini ve her takma ad verilen komut için sayı parametrelerini içeren bir HTML tablosu oluşturur. ParameterCount sütununun değerleri ortalanmıştır.
Format-Custom
Format-Custom, bir nesnenin sınıf tanımına benzer bir biçimde özel bir görünümünü sağlar. Daha karmaşık nesneler, karmaşık türlerle derinlemesine iç içe geçmiş üyeler içerebilir. Format-Custom'un Derinlik parametresi, tüm özellikler için genişletme derinliğini belirtir. derinlik tuşu, özellik başına genişletme derinliğini belirtmenize olanak tanır.
Bu örnekte, derinlik anahtarı, Get-Date cmdlet'inin özel çıktısını basitleştirir. Get-Date bir DateTime nesnesi döndürür. Bu nesnenin Date özelliği aynı zamanda bir DateTime nesnesidir, dolayısıyla nesne yuvalanmıştır.
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'den değiştirmek için hesaplanan özellikleri kullanıyoruz.
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 Tür ö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
Format-Wide cmdlet'i, bir koleksiyondaki nesnelere ilişkin bir özelliğin değerini çok sütunlu bir liste olarak görüntülemenize olanak tanır.
Bu örnekte dosya adını ve boyutunu (kilobayt cinsinden) geniş bir liste olarak görmek istiyoruz. Format-Wide birden fazla özelliği görüntülemediğinden, iki özelliğin değerini tek bir değerde birleştirmek için hesaplanmış 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
Group-Object cmdlet'i, nesneleri belirtilen özelliğin değerine göre gruplar halinde görüntüler. Bu örnekte hesaplanan özellik, her içerik türündeki 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
Measure-Object cmdlet'i nesnelerin sayısal özelliklerini hesaplar. Bu örnekte, 1 ile 10 arasında 3'e tam olarak bölünebilen sayıların sayısını (Toplamı) elde etmek için hesaplanmış bir özellik kullanıyoruz.
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'lerden farklı olarak Measure-Object, hesaplanan özellikler için karma tablosunu kabul etmez. Bir komut dosyası bloğu kullanmanız gerekir.
Select-Object
Select-Object cmdlet'iyle nesnelerin çıktısına ek üyeler eklemek için hesaplanan özellikleri kullanabilirsiniz. Bu örnekte C harfiyle başlayan PowerShell takma adlarını listeliyoruz. Select-Object'i kullanarak takma adın, eşlendiği cmdlet'in ve cmdlet için tanımlanan parametre sayısına ilişkin sayının çıktısını alırız. Hesaplanan bir özelliği 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
Hesaplanan özellikleri kullanarak verileri özellik başına farklı düzenlerde sıralayabilirsiniz. Bu örnek, bir CSV dosyasındaki verileri Tarihe göre artan sırada sıralar. Ancak her tarih içinde satırları Satılan Birimlere göre azalan şekilde 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 komut dosyası bloğunu, bir karma tablosunda
İfadegirişi olarak belirtmek yerine, bağımsız değişken olarak doğrudan belirtebilirsiniz. Örneğin:'1', '10', '2' | Sort-Object { [int] $_ }Bu örnek,
Sort-Object,Group-Object< gibi.Adanahtarı aracılığıyla bir özelliğin adlandırılmasını gerektirmeyen (veya desteklemeyen) cmdlet'ler için uygundur. /code> ve Measure-ObjectÖzelliğin adlandırılmasını destekleyen cmdlet'ler için komut dosyası bloğu bir dizeye dönüştürülür ve çıktıda özelliğin adı olarak kullanılır.
İfadekomut dosyası blokları alt kapsamlarda çalışır; bu, arayanın değişkenlerinin doğrudan değiştirilemeyeceği anlamına gelir.İfadekomut dosyası bloklarının çıktısına ardışık düzen mantığı uygulanır. Bu, tek öğeli bir dizinin çıktısının alınmasının o dizinin açılmasına neden olduğu anlamına gelir.Çoğu cmdlet için ifade komut dosyası bloklarındaki hatalar sessizce göz ardı edilir.
Sort-Objectiçin, ifade sonlandırma ve komut dosyası sonlandırma hataları çıkıştır ancak ifadeyi sonlandırmazlar.
Ayrıca bakınız
- about_Hash_Tables
- ConvertTo-Html
- Format-Custom
- Format-List
- Format-Table
- Format-Wide
- Compare-Object
- Group-Object
- Measure-Object
- Select-Object
- Sort-Object
- .NET'te biçim türleri