我可以使用像这样的包含:
myArr= 'aaa','bbb','ccc'
myArr -contains 'aaa'
但是我可以在一个对象数组上使用它吗?假设我有一个对象数组,我想知道他们的'someProp'属性是否等于某个值?
这不起作用,但我想做这样的事情
myArr = #an array of objects
myArr -contains @{someProp = 'hasThisValue'}
答案 0 :(得分:2)
您不能使用该语法,但可以使用略有不同的语法:
$myarr.someprop -contains 'hasthisvalue'
使用集合的属性,PowerShell会创建一组属性值,因此-contains的工作方式与您期望的一样。
答案 1 :(得分:0)
有趣的问题。
我说可以使用Compare-Object
cmdlet。
我在我的结尾做了一些测试,如果您有对象的引用,-contains
似乎将按预期的方式工作。如果您尝试使用包含不是引用的相同对象的contains,则它将失败。
以此为例。
$myArr = @(@{'Item 1'='Value 1'},@{'Item 2'='Value 2'},@{})
$ItemByVal= @{'Item 1'='Value 1'}
$ItemByRef = $myArr | select -First 1
Write-host "Compare using Contains by val: $($myArr -contains $UtemByVal)" -ForegroundColor Red
Write-Host "Comapre using contains By ref: $($myArr -contains $ItemByRef)" -ForegroundColor Green
ItemByVal
无法使用contains工作。
尽管使用这两种方法,Compare-Object
cmdlet仍然可以正常工作。您可以通过引用或值来使用它。
Compare-Object $myArr $ItemByVal -ExcludeDifferent -IncludeEqual -PassThru
Compare-Object $myArr $ItemByRef -ExcludeDifferent -IncludeEqual -PassThru
答案 2 :(得分:0)
你必须使用解释@Mike Shepard这样的属性。 您可以像这样使用-in:
$myArr = @{PropName1='Value 1';PropName2='test1'},@{PropName1='Value 2';PropName2='test2'}
"Value 1" -in $myArr.PropName1