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

PowerShell:如何合并变量名调用动态命名变量并构建PSObject

问题:PowerShell动态变量引用与PSObject整合问题

我通过以下代码创建了动态变量:

$Data = @()
$i = 1
Foreach ($S in $SB) {
     New-variable "JR$i" "content"
     New-variable "SN$i" "content"
     New-variable "T$i" "content"
     New-variable "FN$i" "content"
     $i = $i++
}

我的目标是将这些动态变量按如下方式放入PSObject中,但当前写法无法正确引用动态变量:

$Data += new-object psobject -property ([ordered]@{JR = "<tr><td>$JR$i</td>"; SN = "<tr><td>$SN$i</td>"; T = "<tr><td>$T$i</td>"; FN = "<tr><td>$FN$i</td>"})

请问如何合并变量名来正确调用这些动态命名的变量?


解决方案

1. 正确引用动态变量的语法

直接写$JR$i会被PowerShell解析为变量$JR的值加上变量$i的值,而非你期望的JR1/JR2这类完整变量名。你需要使用变量名拼接的子表达式语法:${"JR$i"},PowerShell会将引号内的内容解析为完整的变量名,从而获取对应的值。

同时注意,你代码里的$i = $i++存在逻辑错误,这会导致$i的值始终无法递增,应改为$i++或$i = $i + 1。

修改后的完整代码:

$Data = @()
$i = 1
Foreach ($S in $SB) {
    # 创建动态变量
    New-variable "JR$i" "content_$i"
    New-variable "SN$i" "content_$i"
    New-variable "T$i" "content_$i"
    New-variable "FN$i" "content_$i"
    
    # 正确引用动态变量并构建PSObject
    $Data += New-Object psobject -Property ([ordered]@{
        JR = "<tr><td>${"JR$i"}</td>"
        SN = "<tr><td>${"SN$i"}</td>"
        T  = "<tr><td>${"T$i"}</td>"
        FN = "<tr><td>${"FN$i"}</td>"
    })
    
    # 正确递增计数器
    $i++
}

2. 更优的替代方案:避免使用动态变量

动态变量会让代码可读性和维护性下降,更推荐直接在循环中构建PSObject,无需额外创建动态变量:

$Data = @()
$i = 1
Foreach ($S in $SB) {
    $currentContent = "content_$i"
    # 直接创建PSCustomObject并添加到数组
    $Data += [PSCustomObject][ordered]@{
        JR = "<tr><td>$currentContent</td>"
        SN = "<tr><td>$currentContent</td>"
        T  = "<tr><td>$currentContent</td>"
        FN = "<tr><td>$currentContent</td>"
    }
    $i++
}

这种方式逻辑更清晰,也避免了动态变量带来的潜在问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:25:27