5

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

前任。

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

}

有没有另一种方法来获得这些值?有没有比使用哈希表更好的方法?任何帮助,将不胜感激。

4

2 回答 2

6

我可能会使用哈希散列:

param (
    [string[]]$Specify
)

$Options = @{
    TestDomain1 = @{
        Name = 'Test1'
        Hour = 1
    }
    TestDomain2 = @{
        Name = 'Test2'
        Hour = 2
    }
}
foreach ($a in $Specify) {
    $Options.$a.Name
}
于 2013-08-26T18:55:31.620 回答
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 的解决方案是实现目标的更好方法的一个很好的建议。

于 2013-08-26T19:48:03.370 回答