Windows 我可以使用“包含”来匹配对象属性的值吗?
我可以使用如下内容:Windows 我可以使用“包含”来匹配对象属性的值吗?,windows,powershell,Windows,Powershell,我可以使用如下内容: myArr= 'aaa','bbb','ccc' myArr -contains 'aaa' 但是我可以在一组对象上使用它吗?假设我有一个对象数组,我想知道它们的“someProp”属性是否等于某个值 这不管用,但我想这样做 myArr = #an array of objects myArr -contains @{someProp = 'hasThisValue'} 有趣的问题。 我认为应该使用Compare-Objectcmdlet 我在这方面做了一些测试,如果您
myArr= 'aaa','bbb','ccc'
myArr -contains 'aaa'
但是我可以在一组对象上使用它吗?假设我有一个对象数组,我想知道它们的“someProp”属性是否等于某个值
这不管用,但我想这样做
myArr = #an array of objects
myArr -contains @{someProp = 'hasThisValue'}
有趣的问题。
我认为应该使用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
您不能使用该语法,但可以使用稍微不同的语法:
$myarr.someprop -contains 'hasthisvalue'
PowerShell使用集合的属性创建属性值集合,因此-contains的工作方式与您预期的一样。您必须使用explain@Mike Shepard这样的属性。 您也可以这样使用-in:
$myArr = @{PropName1='Value 1';PropName2='test1'},@{PropName1='Value 2';PropName2='test2'}
"Value 1" -in $myArr.PropName1