首页 > 解决方案 > powershell 哈希表动态键

问题描述

我想问你关于哈希表(powershell)中的动态嵌套键的问题。我已经做了一些研究,但我找不到答案。

# I got this hash structure, works fine
$Hashtable                                              = @{}
$Hashtable.Maincategory                             = @{}
$Hashtable.Maincategory.Subcategory                 = @{}
$Hashtable.Maincategory.Subcategory.MyProperty          = @{ 'property' = 'value'}
$Hashtable.Maincategory.Subcategory.MyProperty

Name                           Value
----                           -----
property                       value



# I want dynamic path to my property
$MainAndSubCategory                                                                = [string]'Maincategory.Subcategory'
$Hashtable.$MainAndSubCategory.MyProperty                                               # doesn't work
$Hashtable."$MainAndSubCategory".MyProperty                                         # doesn't work
$Hashtable."$($MainAndSubCategory)".MyProperty                                       # doesn't work
$Hashtable."$(Get-Variable -Name 'MainAndSubCategory' -ValueOnly)".MyProperty           # doesn't work

我会很感激建议,在此先感谢。

标签: powershelldynamicpathkeyhashtable

解决方案


可以构建一个字符串,然后使用Invoke-Expression. 请注意,初始$字符已转义。

$Hashtable                                     = @{}
$Hashtable.Maincategory                        = @{}
$Hashtable.Maincategory.Subcategory            = @{}
$Hashtable.Maincategory.Subcategory.MyProperty = @{ 'property' = 'value'}
$Hashtable.Maincategory.Subcategory.MyProperty

$MainAndSubCategory = 'Maincategory.Subcategory'
Invoke-Expression -Command "`$Hashtable.$MainAndSubCategory.MyProperty"

需要注意的一件事是,任何可以设置字符串值的东西都可能注入不需要的代码。


推荐阅读