如何通过动态名称调用PowerShell中已创建的变量?
解决PowerShell动态变量调用问题
首先,你之前尝试的$$VarName写法在PowerShell里不生效,要调用动态命名的变量,可采用以下两种方法:
方法1:用Get-Variable获取变量值
当生成变量名$VarName后,直接通过Get-Variable指定变量名并仅返回值:
# 假设$obj.context为"paint",$VarName即为"list_of_paint" $VarName = "list_of_" + $obj.context # 获取对应变量的值 $targetValue = Get-Variable -Name $VarName -ValueOnly
方法2:通过作用域变量集合访问
也可以直接从当前执行上下文的变量集合中取值:
$targetValue = $ExecutionContext.SessionState.PSVariable.GetValue($VarName)
修正你原有的代码
你的代码存在两处问题:一是ForEach-Object语法错误,二是添加字符串时$未转义,修正后代码如下:
[System.Collections.ArrayList]$ndf = @() $test = "2" $VarName = "list_of_" + $obj.context # 创建动态变量 New-Variable -Name $VarName -Value $test -Force # 将带$的变量名字符串添加到集合(用`转义$避免解析) $ndf.Add("`$$VarName") | Out-Null
更推荐的替代方案:用哈希表代替动态变量
动态变量容易污染命名空间,管理不便,用哈希表存储动态键值对更可控:
# 初始化哈希表 $appData = @{} # 给对应键赋值 $appData["list_of_$($obj.context)"] = $test # 调用时直接通过键取值 $targetValue = $appData["list_of_$($obj.context)"]
内容的提问来源于stack exchange,提问作者Dasheng
相关产品推荐
相关产品推荐

