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

PowerShell中无法访问PSObject嵌套properties属性的技术问询

如何访问PSObject中嵌套的properties数组内容

我明白你现在的困扰——从Invoke-RestMethod拿到的PSObject里,能轻松拿到items层级下的id和name,但嵌套的properties数组总是取不对对吧?

先说说你之前写法的问题:你用$data.Items.properties[$index]的时候,$data.Items.properties其实会把所有item的properties数组合并成一个大集合,取第$index个元素自然只能拿到单个条目,而不是对应item的全部properties。

正确的遍历方式:直接操作单个item对象

PowerShell更推荐直接遍历集合里的对象,而不是用索引去定位,这样处理嵌套内容会更清晰:

# 遍历每个item对象
foreach ($item in $response.items) {
    # 先拿到当前item的id和name
    $id = $item.id
    $name = $item.name
    Write-Host "当前条目:ID=$id,Name=$name"

    # 遍历当前item的所有properties
    foreach ($property in $item.properties) {
        $propName = $property.name
        $propValue = $property.value
        Write-Host "  属性:$propName = $propValue"
    }

    # 如果需要单独提取某个特定属性(比如var1)
    $var1Value = $item.properties | Where-Object { $_.name -eq 'var1' } | Select-Object -ExpandProperty value
    Write-Host "  提取var1的值:$var1Value`n"
}

进阶:把properties转成哈希表,快速按名称取值

如果经常需要按属性名直接取值,可以把每个item的properties转换成哈希表,这样就不用每次都筛选了:

foreach ($item in $response.items) {
    # 将properties数组转为哈希表,键是属性name,值是对应的属性对象
    $propHash = $item.properties | Group-Object -AsHashTable -AsString -Property name

    Write-Host "ID: $($item.id),Name: $($item.name)"
    # 直接通过键名取值
    Write-Host "  var1: $($propHash['var1'].value)"
    Write-Host "  var2: $($propHash['var2'].value)"
    
    # 处理可能不存在的属性(比如第一个item没有var5)
    if ($propHash.ContainsKey('var5')) {
        Write-Host "  var5: $($propHash['var5'].value)"
    }
    Write-Host ""
}

这样不管是遍历所有属性,还是单独提取某个属性,都能准确拿到对应item的内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:42:37