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

如何在PowerShell中将文本转换为变量名?

解决PowerShell中通过字符串获取变量引用的问题

你需要通过字符串(比如'color')获取对应的数组变量,进而像直接使用数组那样操作它,以下是正确的实现方式和问题分析:

正确实现方法

方法1:使用Get-Variable的-ValueOnly参数(推荐)

这是最安全直观的方式,直接获取目标变量的值:

$select = 'color'
# 获取字符串对应的变量值
$targetArray = Get-Variable -Name $select -ValueOnly

之后即可正常执行你需要的操作:

Write-Host $targetArray  # 输出 red green blue
Write-Host $targetArray[1]  # 输出 green
list $targetArray  # 逐行输出 red、green、blue

方法2:访问Get-Variable返回对象的Value属性

和方法1效果一致,只是写法不同:

$targetArray = (Get-Variable $select).Value

方法3:Invoke-Expression(不推荐)

虽然能实现需求,但如果字符串来源不可信,会存在代码注入风险,谨慎使用:

$targetArray = Invoke-Expression "`$$select"

你之前尝试失败的原因

  • $'color'/$('color'):仅返回字符串'color',并非变量引用
  • -join($'color'):对字符串'color'做拼接操作,结果还是字符串
  • Get-Variable 'color':返回的是变量对象,而非变量的值,需要访问.Value属性才能拿到数组
  • Get-Variable(color):这里直接传入数组$color作为参数,不符合Get-Variable的参数要求,会报错
  • $(Get-Variable 'color'):仍然返回变量对象,未提取实际值

完整测试代码

$trees = @("oak","pine","teak") 
$fruit = @("apple","pear","banana")
$color = @("red","green","blue")

function list($items){
    foreach ($item in $items){
        Write-Host $item
    }
}

$select = 'color'
$targetArray = Get-Variable -Name $select -ValueOnly

# 验证操作
Write-Host $targetArray
Write-Host $targetArray[1]
list $targetArray

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:55:54