環境
Windows PowerShell 2.0
コード
New-Object コマンドレットと -Property パラメータ を使用してユーザー定義オブジェクトを作成。
# 配列
$arr = @()
# ユーザー定義オブジェクトを追加
$p = @{index=-1; name=""; age=-1}
$arr += New-Object PSObject -Property $p
$arr += New-Object PSObject -Property $p
$arr += New-Object PSObject -Property $p
$arr[0].index = 0
$arr[0].name = "あいうえお"
$arr[0].age = 30
$arr[1].index = 1
$arr[1].name = "かきくけこ"
$arr[1].age = 18
$arr[2].index = 2
$arr[2].name = "さしすせそ"
$arr[2].age = 99
# こっちの方がいいかも
# ただし、index が inde とかになっていてもエラーにはならない
<#
$arr += New-Object PSObject -Property @{index=0; name="あいうえお"; age=30}
$arr += New-Object PSObject -Property @{index=1; name="かきくけこ"; age=18}
$arr += New-Object PSObject -Property @{index=2; name="さしすせそ"; age=99}
#>
# 表示
$arr
出力
name age index
---- --- ----
あいうえお 30 0
かきくけこ 18 1
さしすせそ 99 2
Windows PowerShell 3.0以上であれば、
$c = [pscustomobject]@{index=1; name="あいうえお"; age=30}
のようにも記述できるらしい。
注意
文字列として展開したい場合、下記のようにすると失敗する。
# あいうえお と表示されてほしい
"$arr[0].name"
foreach ($a in $arr)
{
"$a.name"
}
# 下記のように出力されてしまう
<#
[0].name
@{name=あいうえお; age=30; index=0}.name
@{name=かきくけこ; age=18; index=1}.name
@{name=さしすせそ; age=99; index=2}.name
#>
属性を文字列に展開する場合、$($arr[0].name) のように記述する必要がある。
"$($arr[0].name)"
foreach ($a in $arr)
{
"$($a.name)"
}
# 出力
<#
あいうえお
あいうえお
かきくけこ
さしすせそ
#>