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

如何通过变量动态引用PowerShell的PSCustomObject或哈希表?

动态访问PowerShell中PSCustomObject变量的属性

方法1:使用Get-Variable直接获取变量

当你已经创建了零散的国家天气变量(如$sweden、$siberia),可以通过Get-Variable根据字符串形式的变量名获取对应对象,再访问属性:

# 示例:预先创建的PSCustomObject对象
$sweden = [PSCustomObject]@{
    monday = "晴,15℃"
    tuesday = "多云,12℃"
}
$siberia = [PSCustomObject]@{
    monday = "暴雪,-20℃"
    tuesday = "小雪,-18℃"
}

# 用户传入的国家名称
$country = 'sweden'

# 动态访问属性
(Get-Variable -Name $country -ValueOnly).monday

参数-ValueOnly会直接返回变量的实际值(即PSCustomObject对象),省去了额外的.Value调用。

方法2:用哈希表统一管理对象(推荐)

如果需要频繁动态访问,更规范的做法是将所有国家天气对象存入哈希表,通过键名直接索引:

# 创建哈希表存储所有国家天气数据
$countryWeather = @{
    sweden = [PSCustomObject]@{
        monday = "晴,15℃"
        tuesday = "多云,12℃"
    }
    siberia = [PSCustomObject]@{
        monday = "暴雪,-20℃"
        tuesday = "小雪,-18℃"
    }
    england = [PSCustomObject]@{
        monday = "阴,10℃"
        tuesday = "小雨,8℃"
    }
}

# 用户传入的国家名称
$country = 'england'

# 直接通过哈希表键访问属性
$countryWeather[$country].monday

这种方式不仅更高效,还能轻松做存在性校验(如if ($countryWeather.ContainsKey($country)) { ... }),避免因变量不存在导致的错误。


为什么之前的写法无效?

"$country"或$($country)只是将变量值转为字符串,PowerShell不会自动将字符串解析为变量名。必须通过Get-Variable(针对零散变量)或哈希表索引(针对统一管理的对象)来实现动态访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:06:00