ウェブサイト検索

PowerShell関数における計算されたプロパティ


PowerShellのオブジェクトから返されるプロパティが理想的な名前ではないことや、値が必要な形式になっていないことがよくあります。そのような場合、PowerShellには計算プロパティの構造があります。この便利な機能を使えば、選択操作中に返される値を簡単に変更し、パイプライン出力で必要なものを迅速かつ簡単に返すことができます。実際には、これはどのように見えるのでしょうか?一つの日付形式を取り、別の形式に変更するのはいかがでしょうか?

$Object | Select-Object "Name","Date",@{
 Name = 'NewDate'
 Expression = { Get-Date $_.Date -Format "MM/dd/yyyy" }
}

これを以前に見たことがない場合、Select-Object コマンドに挿入される形式はかなり奇妙に見えることがあります。それぞれの部分が何を意味するのか、そしてデータを簡単に操作するためにどのように活用できるのかを学ぶために読み進めてください!

計算されたプロパティの構造

計算プロパティは、その核心において、プロパティの出力がどのように見えるべきかを定義するハッシュテーブルです。出力を操作するために定義できるいくつかのキーがあります。

  • 名前/ラベル - 返されるプロパティの名前を指定し、labelはエイリアスとして使用されます。
  • 式 - 新しいプロパティ値を計算するために使用されるスクリプトブロック。
  • 配置 - 表形式の出力コマンドレットが使用される場合、これは 左、中央、または 右 のいずれかの値を使用して列内の値が表示される方法を定義します。
  • Formatstring - フォーマット文字列を指定します。これは、.NET フォーマット文字列です。
  • 幅 - 表形式の出力の場合、列の最大幅を定義します。この値は0より大きくなければなりません。
  • 深さ - Format-Custom コマンドレットでのみ使用され、これはプロパティごとの最大拡張深さを指定します。
  • 昇順/降順 - 1つ以上のプロパティのソート順を指定します。これは、$True または $False に設定されたブール値です。

実際にはこれはどのように見えるのでしょうか?Select-Objectでは、通常NameとExpressionだけを使用します。特定の表形式の出力を制御するためには、さまざまな配置、フォーマット、および幅のオプションを使用できます。

Select-Object および計算プロパティ

ほとんどの場合、Select-Objectは計算プロパティと一緒に使用されます。これにより、ソースデータを変更することなく出力を迅速かつ簡単に操作でき、必要な形式でデータをパイプラインに便利に渡すことができます。下に、実際にこれがどのように見えるかの例があります!まず、以下のすべての例を示すために使用する同じオブジェクトから始めます。

$Object = [PSCustomObject]@{
  'Name' = 'Test Object'
  'Date' = Get-Date
  'Number' = 100
  'Enabled' = $True
  'Extra' = @('One','Two','Three')
}
$Object

日付を見てみると、期待されているものとは少し合っていません。これを別の形式に変更しましょう。オブジェクト自体のGet-Dateコマンドを修正することもできますが、時にはそれができないこともあります。したがって、以下のように計算プロパティを使用して日付形式を変更できます。以下のコードでは、Get-DateのFormatパラメーターを使用して、日付形式をMM/dd/yyyyに変更しています。

$Object | Select-Object Name,@{
  Name = 'NewDate'
  Expression = { Get-Date $_.Date -Format "MM/dd/yyyy" }
}

ご覧のとおり、新しいプロパティ NewDate が作成され、日付形式が変更されました!これはスクリプトブロックを使用しているため、必要に応じて switch のような制御ステートメントやさらなるルックアップなど、多くのロジックを含めることができます。より良い形式でデータを出力する方法を学ぶために読み進めてください。

テーブルの形式と計算されたプロパティ

デフォルトのFormat-Tableの表示は、いくつかの改善の余地があるかもしれません。したがって、作業しやすくするために私たちができることを見てみましょう。元々定義された同じオブジェクトを使用して、出力はどのように見えるでしょうか?

これをもっと良く見せることができます。まず、NumberやEnabledの配置が理想的ではありません。次に、Numberは小数点以下2桁で出力する必要があります。最後に、Nameを広くし、Dateを新しいフォーマットに変更し、Extraをカンマで結合しましょう。下記に、計算プロパティを使用してビューを変更する方法を示します!

$Object | Format-Table @{
  Name = 'Name'
  Expression = { $_.Name }
  Width = 20
},
@{
  Name = 'Date'
  Expression = { Get-Date $_.Date -Format "MM/dd/yyyy" }
  Width = 10
},
@{
  Name = 'Number'
  Expression = { $_.Number }
  Formatstring = 'N2'
  Alignment = 'Center'
  Width = 10
},
@{
  Name = 'Enabled'
  Expression = { $_.Enabled }
  Alignment = 'Center'
  Width = 10
},
@{
  Name = 'Extra'
  Expression = { $_.Extra -Join ", " }
  Width = 30
}

ずっと良くなりました!データを理解するのが容易になり、計算された特性のさまざまな可能性がどのように組み合わさってこの作業を改善するのに役立つかを見ることができます。

結論

計算プロパティは、上流のコードを変更することなくパイプラインの出力を迅速かつ柔軟に変更する必要があるときに役立つユニークな言語構造です。コンソール表示やデータをパイプラインのさらに下流に渡す際のデータ操作に利用できる機能があり、計算プロパティはどのスクリプトにも迅速に統合できます。

関連記事: