オブジェクトを生成してプロパティを追加するスクリプト
PowerShellにはオブジェクトに動的にプロパティを追加する「Add-Member」コマンドレットがある。
使い方はこんな感じ。
オブジェクト | Add-Member NoteProperty [プロパティ名] [値]
「NoteProperty」の他にスクリプトを値として追加できる「ScriptProperty」なんかもある。
動的にプロパティを追加できるといっても、本当にオブジェクトのクラス定義をいじってプロパティを追加するわけではなくて、キーと値のペアをオブジェクトに関連付けて、それをPowerShell上ではあたかもプロパティのように見せているだけ。(たぶん)
で、これを利用して、こんなスクリプトを作ってみた。
New-PSObject.ps1
param([Hashtable]$props=@{}) if($args[0] -eq "-?") { $commandName = [IO.Path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Name) Write-Host @" Name: $commandName Description: Creates new object of PSObject class. Usage: $commandName [[-props] <Hashtable>] -props <Hashtable> The collection of Property name/value pairs. "@ -foregroundColor Yellow exit 1 } $obj = New-Object PSObject $props.GetEnumerator() | % { $obj | Add-Member NoteProperty $_.Key $_.Value } $obj
やってる事は単純でPSObjectをインスタンス化して、引数として渡したHashtableのキーと値をプロパティとして、オブジェクトに追加するだけ。
使い方
PS > $obj = New-PSObject @{ Number=100; Name="Hoge" }
出力
PS > $obj | Format-Table -autoSize Name Number ---- ------ Hoge 100