PowerShellのPSCustomObjectの動作を確認する。

PowerShell コンピュータ
PowerShell

何気に使っていたPSCustomObjectの基本的な使い方を確認してみました。

<#
.SYNOPSIS
PSCustomObjectの操作を確認する。
#>

# PSCustomObjectの生成
$psco = [PSCustomObject]@{'A' = [PSCustomObject]@{'B' = [PSCustomObject]@{'C' = 'DATA' }}}

# プロパティの参照
Write-Host $psco
# @{A=}
Write-Host $psco.A
# @{B=}
Write-Host $psco.A.B
# @{C=DATA}
Write-Host $psco.A.B.C
# DATA

# プロパティへ代入
$psco.A.B.C = "Foo"
# 代入の確認
Write-Host $psco.A.B.C
# Foo

$psco = [PSCustomObject]@{
    A = 1
    B = 2
}
# キーの一覧を取得
$psco | Get-Member -MemberType NoteProperty | Select -ExpandProperty Name
# A
# B

# キーの一覧から要素へアクセス
$psco | Get-Member -MemberType NoteProperty | Select -ExpandProperty Name | % {
    $Name = $_
    $psco.$Name = $psco.$Name + 1
    Write-Host $Name $psco.$Name
}
# A 2
# B 3

# プロパティの追加
$psco | Add-Member -MemberType NoteProperty -Name 'C' -Value 4

# プロパティの削除
$psco.psobject.properties.remove('B')

# 結果の確認
$psco | Get-Member -MemberType NoteProperty | Select -ExpandProperty Name | % {
    $Name = $_
    Write-Host $Name $psco.$Name
}
# A 2
# C 4


連想配列からキャストすることが多く連想配列みたいなものだと思っていたのですが、プロパティのアクセス方法など意外と面倒な感じがします。通常用途では連想配列の方が使い勝手がよさそうです。

PowerShellは得にそうだと思いますが、言語としての柔軟性をあてにしてコードを書いていると、実際動かすと実用に耐えなスクリプトになる場合があります。そのような場合、とりあえずコードを書いて試してみることがお手軽に出来る点がスクリプト言語の良い点だと思います。

コメント