根据对象的值在对象中搜索未知 属性

Search for a unknown property in an object based on its value

我不确定如何处理常见的嫌疑人,即 Where-ObjectSelect-Object

假设我想在 PSCustomObject $Object 中找到字符串 "needle",并且该对象可以有多个 Note 属性,例如 $Object.Haystack1$Object.Haystack2 等等..

在我的例子中,音符属性的数量是已知的并且是固定的,但我想知道当你不知道有多少时,如何处理更难的情况您的对象具有的属性。

我四处寻找 Select/Where-Object 和操作员 -in,但没能做出一个简单、优雅的衬垫来完成这项工作。

$obj = [pscustomobject]@{'Haystack1'='test';'Haystack2'='needle'}

$noteProperties = $obj|get-member -MemberType NoteProperty | select -ExpandProperty name
$noteProperties | Where {$obj."$_" -match 'needle'}

你可以用

单行
$obj|gm -M NoteProperty|?{$obj."$($_.Name)"-match'needle'}

一种可能:

$obj = [pscustomobject]@{'Haystack1'='test';'Haystack2'='needle'}
@($obj | Format-List *| Out-String).split("`n") -like '*needle*'

Haystack2 : needle
$obj = [PSCustomObject]@{"Haystack1" = "test"; "Haystack2" = "needle"}
$obj.PSObject.Properties | ? { $_.Value -eq "needle" }