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 |