Доступ к значениям свойств объекта в PowerShell
Я просматриваю массив объектов, и я могу отображать объекты в порядке.
$obj
отображает каждый объект в моем цикле foreach.
Я пытаюсь получить доступ к полям объектов и их значениям.
Этот код также отлично работает:
$obj.psobject.properties
Чтобы просто увидеть имена каждого поля объекта, я делаю это:
$obj.psobject.properties | % {$_.name}
который также отлично работает.
Когда я пытаюсь получить доступ к значениям этого поля, сделав это:
$obj.psobject.properties | % {$obj.$_.name}
ничего не возвращается и не отображается.
Это делается для диагностических целей, чтобы узнать, могу ли я получить доступ к значениям полей.
Основная дилемма заключается в том, что я не могу получить доступ к определенному значению поля. То есть
$obj."some field"
не возвращает значение, даже если я подтвердил, что "какое-то поле" имеет значение.
Это меня озадачило. Кто-нибудь знает, что я делаю неправильно?
Ответы
Ответ 1
Как только вы перебираете свойства внутри foreach, они становятся доступными через $_
(текущий символ объекта). Так же, как вы напечатали имена свойств с помощью $_.Name
, используя $_.Value
, выведут свои значения:
$obj.psobject.properties | % {$_.Value}
Ответ 2
Приоритет оператора интерпретирует это следующим образом:
($obj.$_).Name
что ни к чему не приводит, потому что вы хотите
$obj.($_.Name)
который сначала оценит имя свойства, а затем получит доступ к нему на $obj
.
Ответ 3
Вам не нужно перебирать все свойства, если вам просто нужно значение одного из них:
$obj.psobject.properties["bla"].value