自由テーマ

Tech

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

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました