2013-10-29 74 views
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 

回答

0

这适用于我使用V4。在V2中运行它不起作用,但是如果从New-Object cmdlet中的对象类型切换为使用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 
1

根据PowerShell的版本你使用添加会员有,你不得不使用-PassThru并重新分配给原始对象如一个问题(v1和v2的可能):

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

在V3,你可以创建这个更简单地说,像这样:

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

在V2,你可以使用新对象Property参数简化,以及:

$Level2Object = new-object psobject -property @{Name='abc';IpAddress='192.168.1.1'} 
0

这种冗余的实例化并没有真正打动我,让我去一个稍微不同的路线:

$Servers = 
@{ 
    "DC1" = [pscustomobject]@{ FQDN = "dc1.ad.foobar.com"; IpAddress = "192.168.2.1"} 
    "DC2" = [pscustomobject]@{ FQDN = "dc2.ad.foobar.com"; IpAddress = "192.168.2.2"} 
    "STS" = [pscustomobject]@{ FQDN = "sts.ad.foobar.com"; IpAddress = "192.168.2.3"} 
} 

那么你也可以非常容易地访问元素:

Servers["DC1"].IpAddress = "192.168.2.4" 

测试PowerShell Core(又名PowerShell 6),就像魅力一样。干杯。