ja-JP/about_Calculated_Properties.help.txt

TOPIC
    about_Calculated_Properties

簡単な説明
    PowerShell では、パイプラインに出力されるオブジェクトに新しいプロパティを
    動的に追加したり、その書式を変更したりできます。

詳細な説明
    いくつかの PowerShell コマンドレットは、入力オブジェクトを変換、グループ化、
    処理して出力オブジェクトにする際に、出力オブジェクトへ新しいプロパティを
    作成できるパラメーターを使います。これらのパラメーターを使うと、入力
    オブジェクトの値に基づいて、新しい計算プロパティを出力オブジェクトに生成
    できます。入力オブジェクトには、計算プロパティの Expression メンバー内で
    $_ または $PSItem 自動変数を使ってアクセスできます。

    計算プロパティは、新しく計算されるプロパティの値を指定するキーと値の
    ペアを含むハッシュテーブルとして定義します。一部のコマンドは、プロパティ
    が出力でどのように表示されるかを制御する別のキーと値のペアもサポートします。

サポートされるコマンドレット
    次のコマンドレットは、Property パラメーターに対する計算プロパティ値を
    サポートします。Format-* コマンドレットは GroupBy パラメーターに対する
    計算値もサポートします。

    各コマンドレットがサポートするキーと値のペアは次のとおりです。

        Compare-Object
            Expression

        ConvertTo-Html
            Name/Label - 省略可能 (PowerShell 6.x で追加)
            Expression
            Width - 省略可能
            Alignment - 省略可能

        Format-Custom
            Expression
            Depth - 省略可能

        Format-List
            Name/Label - 省略可能
            Expression
            FormatString - 省略可能
            同じキーと値のペアの組は、すべての Format-* コマンドレットの
            GroupBy パラメーターに渡される計算プロパティ値にも適用されます。

        Format-Table
            Name/Label - 省略可能
            Expression
            FormatString - 省略可能
            Width - 省略可能
            Alignment - 省略可能

        Format-Wide
            Expression
            FormatString - 省略可能

        Group-Object
            Expression

        Measure-Object
            式にはスクリプトブロックのみをサポートし、ハッシュテーブルは
            サポートしません。
            PowerShell 5.1 以前ではサポートされません。

        Select-Object
            Name/Label - 省略可能
            Expression

        Sort-Object
            Expression
            Ascending/Descending - 省略可能

    注意:
        Expression の値はハッシュテーブルの代わりにスクリプトブロックでも
        構いません。詳細は「注釈」セクションを参照してください。

ハッシュテーブルのキーの定義
    Name/Label
        作成するプロパティの名前を指定します。Name またはそのエイリアス
        Label を同じ意味で使えます。
    Expression
        新しいプロパティの値を計算するために使う文字列またはスクリプトブロック
        です。Expression が文字列の場合、その値は入力オブジェクトのプロパティ
        名として解釈されます。これは Expression = { $_.<PropertyName> } の
        短い書き方です。
    Alignment
        表形式の出力を生成するコマンドレットが、列内で値の表示方法を定義する
        ために使います。値は 'Left'、'Center'、'Right' のいずれかである必要が
        あります。
    FormatString
        値を出力用にどのように書式設定するかを定義する書式文字列を指定します。
    Width
        値を表示するときのテーブルの列の最大幅を指定します。値は 0 より大きい
        必要があります。
    Depth
        Format-Custom の Depth パラメーターは、すべてのプロパティの展開の
        深さを指定します。Depth キーを使うと、プロパティごとに展開の深さを
        指定できます。
    Ascending / Descending
        1 つ以上のプロパティの並べ替え順序を指定できます。これらはブール値
        です。

    指定した名前のプレフィックスが一意であれば、ハッシュテーブルのキーを
    すべて書き出す必要はありません。たとえば Name の代わりに n、Expression の
    代わりに e を使えます。


    Compare-Object
        計算プロパティを使うと、入力オブジェクトのプロパティの比較方法を
        制御できます。この例では、値を直接比較するのではなく、算術演算
        (2 の剰余) の結果と比較しています。

            Compare-Object @{p=1} @{p=2} -Property @{ Expression = { $_.p % 2 } }

             $_.p % 2 SideIndicator
            ---------- -------------
                     0 =>
                     1 <=

    ConvertTo-Html
        ConvertTo-Html はオブジェクトのコレクションを HTML テーブルに変換でき
        ます。計算プロパティを使うとテーブルの表示方法を制御できます。

            Get-Alias |
              ConvertTo-Html Name,
                             Definition,
                             @{
                                Name='ParameterCount'
                                Expr={$_.Parameters.Keys.Count}
                                Align='Center'
                             } |
                Out-File .\aliases.htm -Force

    Format-Custom
        Format-Custom はオブジェクトをクラス定義に似た形式でカスタム表示
        します。Format-Custom の Depth パラメーターはすべてのプロパティの
        展開の深さを指定します。Depth キーを使うと、プロパティごとに展開の
        深さを指定できます。

            Get-Date | Format-Custom @{Expr={$_.Date};Depth=1},TimeOfDay

    Format-List
        この例では、計算プロパティを使って Get-ChildItem の出力の名前と書式を
        変更します。

            Get-ChildItem *.json -File |
              Format-List FullName,
                          @{
                             Name='Modified'
                             Expression={$_.LastWriteTime}
                             FormatString='O'
                          },
                          @{
                             Name='Size'
                             Expression={$_.Length/1KB}
                             FormatString='N2'
                          }

    Format-Table
        この例では、計算プロパティがコンテンツの種類でファイルを分類する
        Type プロパティを追加します。

            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'}
                    }
                  }
                }

    Format-Wide
        Format-Wide コマンドレットは、コレクション内のオブジェクトの 1 つの
        プロパティの値を複数列のリストとして表示できます。Format-Wide は
        複数のプロパティを表示しないため、計算プロパティを使って 2 つの
        プロパティの値を 1 つの値に結合します。

            Get-ChildItem -File |
              Format-Wide -Property @{e={'{0} ({1:N2}kb)' -f $_.Name,($_.Length/1kb)}}

    Group-Object
        Group-Object コマンドレットは、指定したプロパティの値に基づいて
        オブジェクトをグループ化して表示します。この例では、計算プロパティが
        コンテンツの種類ごとのファイル数を数えます。

            Get-ChildItem -File |
              Sort-Object Extension |
                Group-Object -NoElement -Property @{
                  Expression={
                    switch ($_.Extension) {
                      '.md' {'Content'}
                      '' {'Metacontent'}
                      '.ps1' {'Automation'}
                      '.yml' {'Automation'}
                      default {'Configuration'}
                    }
                  }
                }

    Measure-Object
        Measure-Object コマンドレットはオブジェクトの数値プロパティを計算
        します。この例では、計算プロパティを使って 1 から 10 までの数のうち
        3 で割り切れる数の個数を取得します。スクリプトブロックは数が 3 で
        割り切れる場合に $true を、それ以外は $false を返します。Sum 演算は
        $true を 1、$false を 0 として扱います。

            1..10 | Measure-Object -Property {($_ % 3) -eq 0} -Sum

        注意:
            他のコマンドレットと異なり、Measure-Object は計算プロパティに
            ハッシュテーブルを受け付けません。スクリプトブロックを使う必要が
            あります。

    Select-Object
        計算プロパティを使うと、Select-Object コマンドレットで出力する
        オブジェクトにメンバーを追加できます。この例では、文字 C で始まる
        PowerShell エイリアスを一覧表示し、計算プロパティで ParameterCount
        プロパティを作成しています。

            $aliases = Get-Alias c* |
              Select-Object Name,
                            Definition,
                            @{
                                Name='ParameterCount'
                                Expr={$_.Parameters.Keys.Count}
                            }
            $aliases | Get-Member
            $aliases

    Sort-Object
        計算プロパティを使うと、プロパティごとに異なる順序でデータを並べ替え
        られます。この例では CSV ファイルのデータを Date で昇順に並べ替え、
        各日付の中では UnitsSold で降順に並べ替えています。

            Import-Csv C:\temp\sales-data.csv |
              Sort-Object Date, @{Expr={$_.UnitsSold}; Desc=$true}, Salesperson |
                Select-Object Date, Salesperson, UnitsSold

注釈
    - Expression エントリとしてハッシュテーブルに指定する代わりに、式の
      スクリプトブロックを引数として直接指定することもできます。たとえば
      次のようにします。

          '1', '10', '2' | Sort-Object { [int] $_ }

      これは、Sort-Object、Group-Object、Measure-Object のように Name キーで
      プロパティ名を指定する必要が (またはサポートが) ないコマンドレットに
      便利です。プロパティの命名をサポートするコマンドレットでは、スクリプト
      ブロックは文字列に変換され、出力でプロパティの名前として使われます。

    - Expression スクリプトブロックは子スコープで実行されます。つまり、
      呼び出し元の変数を直接変更することはできません。

    - Expression スクリプトブロックの出力にはパイプラインのロジックが適用
      されます。つまり、単一要素の配列を出力すると、その配列はアンラップ
      されます。

    - ほとんどのコマンドレットでは、式のスクリプトブロック内のエラーは静かに
      無視されます。Sort-Object では、ステートメント終了エラーとスクリプト
      終了エラーは出力されますが、ステートメントを終了させません。

関連項目
    about_Hash_Tables
    ConvertTo-Html
    Format-Custom
    Format-List
    Format-Table
    Format-Wide
    Compare-Object
    Group-Object
    Measure-Object
    Select-Object
    Sort-Object

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP