根据原始父对象上数组中对象的属性值筛选原始数组

时间:2013-10-20 15:37:19

标签: powershell-v3.0

我有一组名为$releases的PowerShell对象。版本包含与该版本关联的项目的ID,名称和可选对象数组。每个项目都有一个ID和Name属性。示例如下所示。

id                  : 1
name                : Release 5
associated_projects : {@{id=50; name=Project 1}}

id                  : 2
name                : Release 6
associated_projects : {@{id=51; name=Project 2}}

id                  : 3
name                : Release 7

我想过滤结果,以便只返回那些具有关联项目具有特定关联项目ID的版本。例如,如果我的关联项目ID为50,我将从上面的示例中返回版本1.

我最初的方法是简单地使用嵌套for-each遍历版本以查找关联项目的id。找到后,将版本添加到另一个数组并返回结果。但是,似乎可能有更合适的方法在PowerShell中使用Where-Object处理此问题。但是,我尝试根据原始父对象上数组中对象的属性值过滤此集合失败。

有没有更好的方法来过滤这个对PowerShell来说更惯用?

2 个答案:

答案 0 :(得分:1)

这样的东西?

PS> $releases | ?{ $_.associated_projects -ne $null }

Name                           Value
----                           -----
associated_projects            {id, name}
name                           Release 5
id                             1
associated_projects            {id, name}
name                           Release 6
id                             2

这会过滤掉associated_projects密钥不是$null的对象。

答案 1 :(得分:0)

$releases | Where-Object { $_.associated_projects.id -eq 50 }