You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中使用变量存储的路径导航对象并获取属性?

PowerShell通过变量路径导航对象属性的解决方法

你遇到的问题根源在于:$obj."$mypath" 是试图直接访问名为Level1.Level2的单个属性,而不是先访问Level1再访问其下的Level2,自然找不到对应的值。下面给你几种实用的解决办法:

方法一:拆分路径逐个访问(最安全通用)

把路径按.拆分成单个属性名,然后循环遍历逐步导航对象:

# 示例对象
$obj = [PSCustomObject]@{
    Level1 = [PSCustomObject]@{
        Level2 = [PSCustomObject]@{
            MyProperty = "目标值"
        }
    }
}
$mypath = "Level1.Level2"

# 拆分路径为属性名数组
$props = $mypath.Split('.')
$current = $obj

# 逐个导航属性
foreach ($prop in $props) {
    $current = $current.$prop
}

# 获取最终属性值
$x = $current.MyProperty
$x  # 输出:目标值

方法二:使用Invoke-Expression(注意风险)

如果路径是自己可控的、安全的,可以用Invoke-Expression直接执行拼接的表达式:

$x = Invoke-Expression "`$obj.$mypath.MyProperty"
$x  # 输出:目标值

⚠️ 注意:如果$mypath来自不可信的外部输入,绝对不能用这个方法,因为可能会执行恶意代码。

方法三:用Select-Object链式展开(适合短路径)

如果路径不长,可以用Select-Object -ExpandProperty链式调用:

$x = $obj | Select-Object -ExpandProperty Level1 | Select-Object -ExpandProperty Level2 | Select-Object -ExpandProperty MyProperty
$x  # 输出:目标值

这种方法直观但灵活性差,路径越长写起来越麻烦。

内容的提问来源于stack exchange,提问作者Alexu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 08:32:02