"deflating"が正しい用語であるかどうかわかりませんが、Select-Object
を使用している間にオブジェクトの子供のプロパティの選択のみを返すように指定する方が良いかどうか疑問に思っていましたか?私はPowershell v5を使用しています。Powershell:Child Property Deflation
ここでは完全に動作する例を示します。$test
変数はデモンストレーション目的でハードコードされています。私の場合、$test
配列がAPIから返されています。投影中にname
プロパティをtestChild
オブジェクトから削除したいとします。
これを行う方法を理解できる唯一の方法は、$result
にパイプしながらforeachループを使用して、各子オブジェクトを再作成し、必要なプロパティのみを設定することですが、powershellの方がこれを行う。
$test = @(
[PSCustomObject]@{
testProp = "test1"
testChild = [PSCustomObject]@{
id = 1
name = "test name 1"
}
},
[PSCustomObject]@{
testProp = "test2"
testChild = [PSCustomObject]@{
id = 2
name = "test name 2"
}
}
)
$result = $test | select testProp, testChild | % {
$_.testChild = [PSCustomObject]@{
id = $_.testChild.id
}
$_
}
$result
この出力:
私がしたい正確に何であるtestProp testChild
-------- ---------
test1 @{id=1}
test2 @{id=2}
。 - 私は私が含ま指定/プロパティのみ削除いくつかのプロパティを持つ元のオブジェクトをしたい、私はフラットな特性が返されたくない心の中で
$result = $test | select testProp, testChild.id
ベアリング:私はこのような何かを行うことができれば、私はいいと思います。
ありがとうございました。それでも、私の使用例では、実際には/より多くの/コードを生成しています(主に私がいくつかのプロパティの配列を操作しているため)。他に誰もいなくなったら、これを受け入れるよ! – Spikeh
実際、あなたの答えは私が指定したものではありません - フラットな 'id'プロパティを返しました。それは私の例のようにオブジェクトである必要があります。 – Spikeh
@Spikehあなたは式を独自の 'Select-Object'ステートメントにすることができます。ステートメントはオブジェクトを保持します。あるいは、以前と同じように式を直接[PSObject]にすることができます。いくつかの方法がありますが、あなたが望む正確な結果を直接与えるものは何もありません – briantist