通过其键访问嵌套的hasttables

时间:2018-06-29 12:05:43

标签: powershell

我尝试使用嵌套哈希表来获取特定值(数字)。 哈希表如下所示。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Add
                (new AttributeToColumnAnnotationConvention<CaseSensitive, bool>
                ("CaseSensitive", (property, attributes) => attributes.Single().IsEnabled));
}

我想通过按键查找来访问哈希表。 第一个例子很好用。

$Hashtable = @{
    'Feature1' = @{
        'Audit'  = 1
        'Block'  = 2
        'Change' = 3
    }
    'Feature2' = @{
        'Audit'  = 4
        'Block'  = 5
        'Change' = 3
    }
}

指定多个键也可以。

$Hashtable['Feature1']['Audit', 'Block']
1
2

但是,如果我在第一个哈希表中指定了多个键,则似乎无法访问嵌套的哈希表。

$Hashtable['Feature1', 'Feature2']

Name                           Value
----                           ---- -
Block                          2
Change                         3
Audit                          1
Block                          5
Change                         3
Audit                          4

预期的输出为$Hashtable['Feature1', 'Feature2']['Block', 'Audit'] 215,但我得到的是4

我确实有一种解决方法。如果我遍历第一个结果,就会得到预期的结果。

$null

我只是想知道是否有1)一种更好的方法,以及2)为什么我必须在该示例中循环。

我希望我可以像$Hashtable['Feature1', 'Feature2'] | % {$_['Block', 'Audit']} 2 1 5 4 一样访问哈希表,其中两个变量都是键数组。

1 个答案:

答案 0 :(得分:2)

$Hashtable['Feature1', 'Feature2'].Block

$Hashtable['Feature1', 'Feature2']是一个数组,array.Property符号是为数组的所有元素选择单个属性的简写(需要PowerShell v3或更高版本)。

编辑:仅当您需要单个键时,以上方法才有效。如果您需要多个,我想不出任何方法来跳过对内部哈希表的迭代。一次选择多个键(例如$Hashtable['Feature1', 'Feature2'])只能在哈希表上完成,而不能在数组上进行,并返回一个数组,因此无法链接。