PowerShell:如何通过变量存储的属性路径访问对象嵌套属性
实现嵌套属性路径访问的方法
方法1:拆分路径并循环遍历(推荐,安全可控)
把存储路径的字符串按.拆分,逐个访问对象属性逐步深入,这是最安全可靠的方式:
# 示例复杂对象 $a = [PSCustomObject]@{ b = [PSCustomObject]@{ c = "myvalue" } } $replace = "b.c" # 遍历路径片段获取嵌套属性 $currentObj = $a foreach ($prop in $replace.Split('.')) { $currentObj = $currentObj.$prop } $currentObj # 输出: myvalue
方法2:使用Invoke-Expression(注意安全风险)
如果路径字符串来源绝对可信,可以直接拼接代码并执行:
$a = [PSCustomObject]@{ b = [PSCustomObject]@{ c = "myvalue" } } $replace = "b.c" $result = Invoke-Expression "`$a.$replace" $result # 输出: myvalue
⚠️ 警告:若$replace包含不可信内容,此方法会执行恶意代码,仅在路径完全可控时使用。
方法3:使用.NET反射(适配复杂对象场景)
针对非公开属性或特殊.NET对象,可通过反射实现属性访问:
$a = [PSCustomObject]@{ b = [PSCustomObject]@{ c = "myvalue" } } $replace = "b.c" $currentObj = $a foreach ($prop in $replace.Split('.')) { $propInfo = $currentObj.GetType().GetProperty($prop) if ($propInfo) { $currentObj = $propInfo.GetValue($currentObj) } else { $currentObj = $null break } } $currentObj # 输出: myvalue
内容的提问来源于stack exchange,提问作者Papi Abi
相关产品推荐
相关产品推荐

