Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 我可以使用“包含”来匹配对象属性的值吗?_Windows_Powershell - Fatal编程技术网

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