2016-06-28 9 views
3

普通の容疑者、つまりWhere-ObjectまたはSelect-Objectでこれを行う方法がわかりません。ノートプロパティの数が私の場合はその値に基づいてオブジェクト内の未知のプロパティを検索する

..ように

は、私がPSCustomObject $Objectに文字列「針」を見つけたいと仮定し、そのオブジェクトは、$Object.Haystack1など、いくつかの注意特性を有することができ、$Object.Haystack2とよく知られていて固定されていますが、私はあなたがを知らないと難しいケースのために何をすべきかを知りたいと思います。あなたのオブジェクトにいくつのプロパティがありますか?

私はSelect/Where-Objectとオペレーター-inとの間を突き刺しましたが、仕事をする簡単でエレガントな1つのライナーは作れませんでした。

+1

あなたのプログラムを設計しないのですか? – TessellatingHeckler

+0

誰かがそのコメントをしたと思った;)残念ながら、それは私が設計したものではない。それは、データエクスポートに関して同様の情報を提供する2つの異なるソフトウェアを持っているが、それらの出力をフィルタリング/マッチングする必要があるという奇妙なケースです。 – Bluz

+0

@Mattは文法の色付けへの貢献に大変感謝していますが、セマンティクススタイルは変更する場所ではありませんでした。 「常に元の著者を尊重します」とは、メッセージが伝染しない限り、メッセージを伝えたいという調子を含みます.- merci buckets :) – Bluz

答えて

7
$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'} 
+0

かなり賢い!どうもありがとう! – Bluz

4

一つの可能​​性でワンライナーを:

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

Haystack2 : needle 
0
$obj = [PSCustomObject]@{"Haystack1" = "test"; "Haystack2" = "needle"} 
$obj.PSObject.Properties | ? { $_.Value -eq "needle" } 
あなたがそれを行う必要があるので、
+0

スタックオーバーフローでは、コードのみの回答は推奨されません。あなたのコードがOPの問題をどのように解決するかを説明してください。 –

関連する問題