【发布时间】:2017-09-27 15:38:39
【问题描述】:
我想使用 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
运行命令会报错:
“在此对象上找不到属性 'B.C'。请确认 属性存在,可以设置。”
注意:代码支持任何级别的嵌套。
【问题讨论】:
-
它无法知道您要求的是嵌套属性。我试图找到我认为这是一个欺骗目标的东西。您需要构建逻辑以支持单个字符串中的嵌套属性。这会起作用,但不是你想要的
$json.$propertyName.$nestedPropertyName.,因为它只会满足一个用例。需要一个递归函数iirc -
@Matt 感谢您的评论。我知道
$json.$propertyName.$nestedPropertyName。但它不是基于属性名称的,不满足运行时按名称解析属性的要求。还有关于链接的帖子,它是 Get,而我正在寻找 Set。 -
是的......我知道......看看链接的答案,看看是否能让你找到更好的方向。
标签: powershell anonymous-types cmdlet