динамический ключ хеш-таблицы powershell - PullRequest
0 голосов
/ 05 ноября 2019

Я хотел бы спросить вас о динамических вложенных ключах в хеш-таблицах (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

Буду признателен за совет, заранее спасибо.

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Можно построить строку, а затем выполнить ее, используя 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"

Следует помнить, что все, что может установить значение строки, сможет внедрить нежелательный код.

0 голосов
/ 05 ноября 2019

это будет работать, но я не уверен, если это решение, вы ищете

$Hashtable.$(($MainAndSubcategory -split '\.')[0]).$(($MainAndSubcategory -split '\.')[1]).myproperty

Это то же самое, что положить ключи основной категории и подкатегории вотдельные переменные

...