Звучит так, как будто вы хотите проверить массив $a
на предмет содержания объекта с заданным набором значений свойств ($x
, $y
, $z
) для заданного набора имен свойств (.X
, .Y
, .Z
):
$hasObjectWithValues = [bool] $(foreach ($o in $a) {
if ($o.X -eq $x -and $o.Y -eq $y -and $o.Z -eq $z) {
$true
break
}
})
Примечание. Форма очистки [bool] $hasObjectWithValues = foreach ...
должна работать, но с PowerShell Core 7.0.0-preview.4, нет, из-за этой ошибки
Что касается того, что вы пытались :
$a -contains $x,$y, $z
RHS оператора -contains
PowerShell поддерживает только скаляр (одно значение), который проверяется на равенство с элементами вLHS со значением массива.
Однако, даже если вы обернули вашу RHS в один объект - [pscustomobject] @{ X = $x, Y = $y, Z = $z }
, этот подход не сработает, потому что [pscustomobject]
s, что также возвращается Invoke-RestMethod
являются ссылочными типами , которые - в отсутствие пользовательского поведения сравнения равенства - сравниваются по ссылочному равенству , что означает, что они считаются равными, только если они ссылаютсяк тому же объекту в памяти .