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

PowerShell如何匹配对象子属性 实现列表嵌套属性过滤

嵌套子属性过滤失效的原因

Where-Object的「属性名 比较运算符 值」简化语法仅支持匹配对象的顶层直接属性,不会自动解析点分隔的嵌套属性路径。你直接写name.firstName这类路径时,PowerShell会把整串字符当成一个顶层属性名查找,自然返回不了正确结果。
另外你贴的WSUS排查代码里还有两个笔误,也会导致执行失败:

  • 定义的集合变量是$updates,后续过滤时误写为$update
  • cmdlet名写错,是Where-Object(中间是连字符)不是Where_Object(中间是下划线)
正确过滤写法

使用Where-Object的脚本块过滤模式,把判断逻辑包裹在{}中,用$_指代当前遍历的列表项,直接写完整的嵌套属性访问路径即可,这个写法全版本PowerShell通用。

普通嵌套属性场景示例

# 查找name.firstName等于Bob的对象
$listOfObjects | Where-Object { $_.name.firstName -eq "Bob" }

WSUS更新查找场景示例

$updates = Get-WsusUpdate
# 查找标题包含"Windows"的更新
$updates | Where-Object { $_.Update.Title -match "Windows" }

鲁棒性优化写法

如果列表里可能存在缺失中间层属性的对象,建议在判断嵌套属性前先校验中间层是否为空,避免抛出空引用错误:

$listOfObjects | Where-Object { $_.name -ne $null -and $_.name.firstName -eq "Bob" }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:21:49