PowerShellを使用してネストされたオブジェクトプロパティの値を設定します。それが動作しない、ネストされたプロパティについてはPowerShellでネストされたオブジェクトプロパティの名前を名前で設定する
$propertyName = "someProperty"
$obj.$propertyName = "someValue" # ← It works
:あなたが最初のレベルのプロパティの値を設定しようとしているとき、それは静かに簡単です
$propertyName = "someProperty.someNestedProperty"
$obj.$propertyName = "someValue" # ← It doesn't work and raises an error.
はどのようにネストされたオブジェクトのプロパティの値を設定しますPowerShellを使っているプロパティの名前で?ここでは、問題を再現したい人のための
MCVE
簡単な例です:
$Obj= ConvertFrom-Json '{ "A": "x", "B": {"C": "y"} }'
# Or simply create the object:
# $Obj= @{ A = "x"; B = @{C = "y"} }
$Key = "B.C"
$Value = "Some Value"
$Obj.$Key = $Value
は、コマンドを実行するとエラーが発生します:
"The property 'B.C' cannot be found on this object. Verify that the property exists and can be set."
ネストされたプロパティを要求していることを知る方法がありません。私はこれが二重標的であると思うものを見つけようとしています。単一の文字列でネストされたプロパティをサポートするロジックを構築する必要があります。これはうまくいくはずですが、 '$ json。$ propertyName。$ nestedPropertyName.'は、その1つのユースケースを満たすだけなので、あなたが望むものではありません。再帰関数が必要ですiirc – Matt
これは私が考えていたと思います。https://stackoverflow.com/questions/45174708/powershell-turn-period-delimited-string-into-object-properties/45175340#45175340 – Matt
@Mattコメントありがとう。私は '$ json。$ propertyName。$ nestedPropertyName'を認識しています。しかし、それはプロパティ名に基づいておらず、実行時にプロパティを名前で解決するという要件を満たしていません。リンクされたポストについても* Get *、* Set *を探しています。 –