2013-10-29 71 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),就像魅力一樣。乾杯。