首页 > 解决方案 > PowerShell - 将计数器附加到数组变量并在之后使用它

问题描述

我有以下代码:

$CompletedCount = 0
$ArrayName1 = @('test','test1','test2')
$ArrayName2 = @('test3','test4','test5')
$Array = 0
while($true)
{
    Write-Host $CompletedCount
    $CompletedCount =2
    if ($CompletedCount -gt 0)
        {
            $Array++
            $ArrayToDo = "ArrayName{0}" -f $Array
            Write-Host "Starting with $ArrayToDo"
            foreach ($Name in $ArrayToDo)
            {
                Write-Host $ArrayToDo.Length
                $Name     
            } 
            Start-Sleep -Seconds 5
        }else
        {
            Write-Host "not able to start new batch, sleeping" 
            Start-Sleep -Seconds 10
        }
}

foreach ($Name in $ArrayToDo)我希望它显示值的行中,$ArrayName1但它唯一做的就是打印 10 和 ArrayName1 。为什么不“获取”数组变量并显示其值?

标签: arrayspowershellvariablesdynamicconcatenation

解决方案


您只想通过字符串名称来查找变量的值。当解析器看到$字符串之外或像正则表达式这样的特殊情况时,它会将以下字符(只要它们是合法的变量字符)解释为变量名。因此,如果您在解析时没有为解析器提供变量名称$(因为标记化发生在变量替换之前),那么您需要另一种方法。输入Get-Variable

$ArrayName1 = @('test','test1','test2')
$ArrayName2 = @('test3','test4','test5')
$Array = 1
while ($Array -le 2) {
    $ArrayToDo = "ArrayName{0}" -f $Array++
    foreach ($name in (Get-Variable $ArrayToDo -ValueOnly)) {
        "A Name in $ArrayToDo"
        $name
    }
}

推荐阅读