1

オブジェクトをハッシュテーブルに入れようとしています。エラーは発生していませんが、データにアクセスできません。

$Level1Hashtable = @{}
$Level2Object = New-Object System.Object
$Level2Object | Add-Member -MemberType NoteProperty -Name Name -Value "abc"
$Level2Object | Add-Member -MemberType NoteProperty -Name IpAddress -Value "192.168.1.1"
$Level1Hashtable.Add("Test1",$Level2Object)
$Level2Object = New-Object System.Object
$Level2Object | Add-Member -MemberType NoteProperty -Name Name -Value "123"
$Level2Object | Add-Member -MemberType NoteProperty -Name IpAddress -Value "192.168.1.1"
$Level1Hashtable.Add("Test2",$Level2Object)

$Level1Hashtable.Test1.IpAddress
4

3 に答える 3

1

使用している PowerShell のバージョンによっては、Add-Member に問題 (v1 およびおそらく v2) があり、-PassThru を使用して元のオブジェクトに再割り当てする必要がありました。

$Level2Object = $Level2Object | Add-Member NoteProperty Name abc -PassThru

V3 では、次のように簡単に作成できます。

$Level2Object = [pscustomobject]@{Name='abc';IpAddress='192.168.1.1'}

V2 ではProperty、new-object のパラメーターを使用して単純化することもできます。

$Level2Object = new-object psobject -property @{Name='abc';IpAddress='192.168.1.1'}
于 2013-10-29T14:36:51.097 に答える
1

V4を使用している私にとってはうまくいきます。V2 で実行しても機能しませんが、New-Object コマンドレットのオブジェクト タイプを System.Object から PSObject に切り替えると機能します。

$Level1Hashtable = @{}
$Level2Object = New-Object PSObject
$Level2Object | Add-Member -MemberType NoteProperty -Name Name -Value "abc"
$Level2Object | Add-Member -MemberType NoteProperty -Name IpAddress -Value "192.168.1.1"
$Level1Hashtable.Add("Test1",$Level2Object)
$Level2Object = New-Object PSObject
$Level2Object | Add-Member -MemberType NoteProperty -Name Name -Value "123"
$Level2Object | Add-Member -MemberType NoteProperty -Name IpAddress -Value "192.168.1.1"
$Level1Hashtable.Add("Test2",$Level2Object)

$Level1Hashtable.Test1.IpAddress
于 2013-10-29T14:37:19.987 に答える