1
我想使用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.',因为它只能满足那个用例。需要递归函数iirc – Matt
我想这就是我在想的https://stackoverflow.com/questions/45174708/powershell-turn-period-delimited-string-into-object-properties/45175340#45175340 – Matt
@Matt感谢您的评论。我知道'$ json。$ propertyName。$ nestedPropertyName'。但它不是基于属性名称,并且不满足在运行时按名称解析属性的要求。关于链接的文章,它是* Get *,而我正在寻找* Set *。 –