3

我有一个名为$releases. 发布包含与发布相关的项目的 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来说更惯用的方法?

4

2 回答 2

6

像这样的东西?

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

于 2013-10-21T06:00:32.203 回答
2
$releases | Where-Object { $_.associated_projects.id -eq 50 }
于 2018-05-15T19:41:42.463 回答