在嵌套属性上过滤ArrayList

时间:2018-10-03 13:39:47

标签: powershell powershell-v4.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')

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

因此,在上述情况下,结果应仅包含第2行和第3行(来自$displayObjects)。

我已经尝试使用$displayObjects | Where-Object ...进行思考和测试,但是无法想到一种如何在其中循环的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:5)

类似的事情可能会起作用:

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

使用LINQlike this?)可能有一种更有效的方法,但是我对此并不足够。

答案 1 :(得分:0)

这应该有效。不过,这可能不是最有效的方法。

$displayObjects | Where-Object { 
    $tags = [string]$_.Tags
    $returnObject = $true
    $filter | foreach {
        if($tags -notlike "*$_*"){
            $returnObject = $false
        }
    }
    $returnObject
}