我有一个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 ...
进行思考和测试,但是无法想到一种如何在其中循环的方法。有什么建议吗?
答案 0 :(得分:5)
类似的事情可能会起作用:
... | Where-Object {
$a = @($_.Tags.name)
($filter | Where-Object {$a -contains $_}).Count -eq $filter.Count
}
答案 1 :(得分:0)
这应该有效。不过,这可能不是最有效的方法。
$displayObjects | Where-Object {
$tags = [string]$_.Tags
$returnObject = $true
$filter | foreach {
if($tags -notlike "*$_*"){
$returnObject = $false
}
}
$returnObject
}