3

という PowerShell オブジェクトの配列があります$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 を返します。

私の最初のアプローチは、関連するプロジェクトの ID を探すために、ネストされた for-each を使用してリリースを単純に反復することです。見つかったら、リリースを別の配列に追加し、結果を返します。ただし、Where-Object を使用して PowerShell でこれを処理するより適切な方法があるようです。それでも、元の親オブジェクトの配列内のオブジェクトのプロパティ値に基づいてこのコレクションをフィルター処理しようとして失敗しました。

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 に答える