Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 哈希表中的对象_Object_Powershell_Hashtable - Fatal编程技术网

Object 哈希表中的对象

Object 哈希表中的对象,object,powershell,hashtable,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

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

$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

根据您使用的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中,您还可以在新对象上使用
属性
参数来简化:

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

这对我使用V4很有效。在V2中运行它不起作用,但是如果我在新对象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

这种冗余实例化并没有真正打动我,所以我选择了一种稍微不同的方式:

$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)上测试,效果很好。干杯