PowerShellでのデータ処理にはカスタムオブジェクトが有用である。PSCustomObjectの生成とプロパティの動的追加方法について解説する。
カスタムオブジェクトの生成
PowerShellでは、[PSCustomObject]
型を利用してカスタムオブジェクトを生成する。最も簡潔な方法は、ハッシュテーブルをキャストする方法である。
$data = [PSCustomObject]@{ Name = "ProductA" Price = 100 } $data | Get-Member
この方法でオブジェクトを初期化し、初期プロパティを設定できる。
プロパティの動的追加
既存のカスタムオブジェクトにプロパティを追加する場合、Add-Member
コマンドレットを使用する。Add-Member
はオブジェクトに新しいメンバー(プロパティやメソッドなど)を追加する機能を持つ。
NotePropertyの追加
データプロパティを追加するには、-MemberType NoteProperty
を指定する。
$product = [PSCustomObject]@{ Name = "GadgetX" ID = "G-001" } # 価格プロパティを追加 $product | Add-Member -MemberType NoteProperty -Name Price -Value 29.99 # 製造年月日プロパティを追加 $product | Add-Member -MemberType NoteProperty -Name ManufactureDate -Value (Get-Date "2023-01-15") $product | Format-List
-MemberType NoteProperty
は既定のメンバータイプであるため、省略可能である。
$product = [PSCustomObject]@{ Name = "GadgetY" } $product | Add-Member -Name Version -Value "1.0.0" $product
AliasPropertyの追加
既存プロパティの別名を定義する場合は、-MemberType AliasProperty
を使用する。
$serverInfo = [PSCustomObject]@{ HostName = "WebServer01" IPAddress = "192.168.1.100" } $serverInfo | Add-Member -MemberType AliasProperty -Name ServerName -Value HostName -Force $serverInfo.ServerName
-Force
パラメータは、同名のメンバーが存在する場合に上書きを許可する。
New-Object PSObject と Add-Member
PowerShell 2.0以前では、New-Object PSObject
で空のオブジェクトを作成し、Add-Member
でプロパティを追加する方法が一般的だった。
$legacyObject = New-Object PSObject $legacyObject | Add-Member -MemberType NoteProperty -Name Item -Value "Book" $legacyObject | Add-Member -MemberType NoteProperty -Name Quantity -Value 5 $legacyObject
現代のPowerShellでは[PSCustomObject]
キャストの方が簡潔であり推奨される。Add-Member
は、既存のオブジェクトに新たなデータ構造を柔軟に追加する主要な手段である。
コメント