powershell - это хорошо, но не так красиво, потому что оно разворачивает коллекции для вас, и иногда это может скрывать, что он маскирует элементы элементов.Когда вы используете $parents.item
, вы получаете доступ к методу массива и пытаетесь получить доступ к его членам (которых там нет, поэтому powershell дает вам $null
):
Item ParameterizedProperty System.Object IList.Item(int index) {get;set;}
Вы можете преодолеть это с помощью метода, которым я поделился в комментариях, для итерации по каждому члену и избежать маскировки:
$list = $parents | ForEach-Object -MemberName item
$list.registration.parentCompoundNumber
В качестве альтернативы, синтаксис больше людейзнакомы с:
$list = $parents | Select-Object -ExpandProperty item
или его развертыванием самостоятельно:
# you could directly assign the outputs of a `foreach` loop to a variable by
# removing these comments (<##>)
<# $items = #>
foreach ($parent in $parents) {
$parent.item.registration.parentCompoundNumber
}
Чтобы увидеть, когда происходит это маскирование, рассмотрим пример, в котором используется оператор унарного массива:
, @('a', 'b', 'c') | Get-Member
Это позволит вам наблюдать за массивом обёрток или членами коллекции.