Powershell在函数中迭代变量名

Powershell在函数中迭代变量名,powershell,Powershell,我当前的目标是创建一个可以生成$ProgressBar1、$ProgressBar2等的函数。同时定义名称,并在下面给出适当的定义。比如大小和位置 这是针对一个带有GUI的过于复杂的Powershell脚本的,我将调用一个包含任意数量项的列表框到Foreach{MakeBar}。条形图将监视任务进度 $counter=0当前在脚本级别定义 function MakeBar { New-Variable -Name "ProgressBar$script:counter" ProgressBa

我当前的目标是创建一个可以生成$ProgressBar1、$ProgressBar2等的函数。同时定义名称,并在下面给出适当的定义。比如大小和位置

这是针对一个带有GUI的过于复杂的Powershell脚本的,我将调用一个包含任意数量项的列表框到Foreach{MakeBar}。条形图将监视任务进度

$counter=0当前在脚本级别定义

function MakeBar
{

New-Variable -Name "ProgressBar$script:counter"

ProgressBar$script:counter = New-Object 'System.Windows.Forms.ProgressBar'
$loc = ((23 * $script:counter) + 12)
ProgressBar$script:counter.Location = '94, $loc'
ProgressBar$script:counter.Name = 'progressbar1'
ProgressBar$script:counter.Size = '1109, 23'
ProgressBar$script:counter.TabIndex = 1
$script:counter++
}

有人警告我不要修改当前范围之外的内容,但我不确定如何在Powershell中实现这一点。

我建议让函数根据传入的参数创建进度条(请注意,如果希望变量以字符串形式展开,则必须使用双引号):

并在调用函数的循环(?)中执行所有计数器处理和变量赋值:

$counter = 0
foreach (...) {
  New-Variable -Name "ProgressBar$counter" -Value (New-ProgressBar $counter)
  $counter++
}
就个人而言,我更喜欢将进度条放入哈希表,而不是单个变量,不过:

$counter  = 0
$progress = @{}
foreach (...) {
  $progress["Bar$counter"] = New-ProgressBar $counter
  $counter++
}

MakeBar
应返回一个
System.Windows.Forms.ProgressBar
,您可以将其存储在数组/列表中,而不是使用变量计数器。您还可以使用哈希表存储多个进度条<代码>$bar=@{'Progress1'={};'Progress2'={}}
$counter  = 0
$progress = @{}
foreach (...) {
  $progress["Bar$counter"] = New-ProgressBar $counter
  $counter++
}