Доступ к значениям свойств объекта в 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