使用变量来引用哈希表的内容

时间:2013-08-26 18:33:30

标签: variables powershell hashtable

我正在尝试通过名称引用通过参数传入的哈希表。

实施例

TestScript.Ps1 -specify TestDomain1,TestDomain2

TestScript.ps1的内容:

param(
    [string[]]$specify
)


$TestDomain1 = @{"Name" = "Test1", "Hour" = 1}
$TestDomain2 = @{"Name" = "Test2", "Hour" = 2}

foreach($a in $specify)
{
    write-host $($a).Name
    #This is where I would expect it to return the Name value contained in the respective
    # hash table. However when I do this, nothing is being returned

}

有没有其他方法可以做到这一点来获得这些值?有没有更好的方法而不是使用哈希表?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:6)

我可能会使用散列哈希:

param (
    [string[]]$Specify
)

$Options = @{
    TestDomain1 = @{
        Name = 'Test1'
        Hour = 1
    }
    TestDomain2 = @{
        Name = 'Test2'
        Hour = 2
    }
}
foreach ($a in $Specify) {
    $Options.$a.Name
}

答案 1 :(得分:4)

  

有没有其他方法可以做到这一点来获取这些值?

是的,您可以使用Get-Variable cmdlet。

param(
[string[]]$Specify
)

$TestDomain1 = @{"Name" = "Test1"; "Hour" = 1}
$TestDomain2 = @{"Name" = "Test2"; "Hour" = 2}

foreach($a in $specify)
{
 $hashtable = Get-Variable $a
 write-host $hashtable.Value.Name
 #This is where I would expect it to return the Name value contained in the respective
 # hash table. However when I do this, nothing is being returned
}
  

是否有更好的方法而不是使用哈希表?

使用哈希表并不像通过输入定义的名称引用变量那么大。如果传递指定参数的内容使用了一个引用您不想访问的变量的字符串,该怎么办? @ BartekB的解决方案是一个很好的建议,可以更好地实现您的目标。