首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象在散列表中。

对象在散列表中。
EN

Stack Overflow用户
提问于 2013-10-29 14:16:21
回答 3查看 3.6K关注 0票数 1

我想把东西放进哈希表里。我没有收到错误,但无法访问数据。

代码语言:javascript
复制
$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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-29 14:37:19

这对我使用V4是有效的。在V2中运行它不起作用,但如果我从使用System.Object切换到对中的对象类型使用PSObject,就会这样做。

代码语言:javascript
复制
$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
EN

Stack Overflow用户

发布于 2018-02-07 01:11:08

这种冗余实例化并不能真正打动我,所以我走了一条稍微不同的路线:

代码语言:javascript
复制
$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"}
}

然后,您还可以非常容易地访问元素:

代码语言:javascript
复制
Servers["DC1"].IpAddress = "192.168.2.4"

测试在PowerShell核心(又名PowerShell 6),工作像一个魅力。干杯。

票数 2
EN

Stack Overflow用户

发布于 2013-10-29 14:36:51

根据所使用的PowerShell版本的不同,添加成员遇到了一个问题(v1和v2),您必须使用-PassThru并将其重新分配到原始对象,例如:

代码语言:javascript
复制
$Level2Object = $Level2Object | Add-Member NoteProperty Name abc -PassThru

在V3中,您可以更简单地创建如下所示:

代码语言:javascript
复制
$Level2Object = [pscustomobject]@{Name='abc';IpAddress='192.168.1.1'}

在V2中,您也可以在新对象上使用Property参数来简化:

代码语言:javascript
复制
$Level2Object = new-object psobject -property @{Name='abc';IpAddress='192.168.1.1'}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19660757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档