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は、既存のオブジェクトに新たなデータ構造を柔軟に追加する主要な手段である。

コメント