哈希表中的对象

时间:2013-10-29 14:16:22

标签: object powershell hashtable

我正在尝试将对象放在哈希表中。我没有收到错误但无法访问数据。

$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

3 个答案:

答案 0 :(得分: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中,你可以使用new-object上的Property参数来简化:

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

答案 1 :(得分: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

答案 2 :(得分: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)上测试,就像一个魅力。欢呼声。