在嵌套属性上过滤ArrayList

Ste*_*hev 0 powershell powershell-4.0

我有一个PowerShell ArrayList($displayObjects),其中包含:

Name  ID  Tags
----  --  ----
Test1 123 {@{id=4567; name=test1;}}
Test2 345 {@{id=4567; name=test1;}, @{id=6789; name=test2}}
Test3 567 {@{id=4567; name=test1;}, @{id=6789; name=test2}, @{id=7890; name=test3}}

而另一个:

$filter = @('test1', 'test2')
Run Code Online (Sandbox Code Playgroud)

并根据数组中指定的值过滤$displayObjects(Tags.name)$filter.

因此在上面的情况下,结果应该只包含第2行和第3行(来自$displayObjects).

我已经坚持思考和测试$displayObjects | Where-Object ...但却想不出如何在那里循环.有什么建议?

Ans*_*ers 5

像这样的东西可能会起作用:

... | Where-Object {
    $a = @($_.Tags.name)
    ($filter | Where-Object {$a -contains $_}).Count -eq $filter.Count
}
Run Code Online (Sandbox Code Playgroud)

使用LINQ可能有一种更有效的方法(像这样吗?),但我不够精通.