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ğerinden expression = { $_.<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ğerinden 0bü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 eExpressionkullanabilirsinizn.

Ö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-ChildItemdeğ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 Cbaşlayan PowerShell diğer adlarını listeleyeceğiz. kullanarak Select-Objectdiğ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ğin Sort-Object, , Group-Objectve Measure-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.

  • Expressionbetik 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-Objectdeyimini sonlandırma ve betik sonlandırma hataları çıkıştır ancak deyimini sonlandırmaz.

Ayrıca bkz.