You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问嵌套在PSCustomObject中的数组元素?

问题原因分析

你只拿到"Mango"是因为错误地先提取了所有对象的Items属性再按索引取值。比如你可能写了类似这样的代码:

$index = $food.Category.IndexOf("Fruits")
$food.Items[$index]

这里$food.Items会把数组里所有对象的Items属性展开合并成一个一维数组:@("Mango", "Pineapple", "Orange", "Tangerine", "Abidjan", "Douala", "Dog", "Bird", "Cat"),当$index为0时,自然只取到第一个元素"Mango"。

正确实现方式

有几种简洁的方法可以直接获取"Fruits"分类下的所有Items:

方法1:用Where-Object过滤(最直观)

直接筛选出Category等于"Fruits"的对象,再提取其Items属性:

$fruitItems = $food | Where-Object { $_.Category -eq "Fruits" } | Select-Object -ExpandProperty Items
$fruitItems

输出:

Mango
Pineapple
Orange
Tangerine

方法2:按索引定位对象后取Items

如果一定要用索引方式,得先找到目标对象在$food数组中的索引,再通过索引获取该对象,最后提取它的Items属性:

$index = $food.Category.IndexOf("Fruits")
$fruitItems = $food[$index].Items
$fruitItems

这样就能拿到完整的水果数组,因为$food[$index]指向的是Category为"Fruits"的自定义对象,再取它的Items就是对应的数组。

方法3:点标记法结合条件(PowerShell 3.0+)

更简洁的写法,直接通过点标记和条件筛选:

$fruitItems = $food[$food.Category -eq "Fruits"].Items
$fruitItems

$food.Category -eq "Fruits"会返回布尔数组@($true, $false, $false),用它作为索引传入$food就能直接筛选出目标对象,再提取Items即可。

内容的提问来源于stack exchange,提问作者SavedByJESUS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 09:27:37