Powershell在函数中迭代变量名

时间:2016-03-29 09:05:32

标签: powershell

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

这是一个过于复杂的Powershell脚本w / GUI,我将调用一个列有任意数量项目的列表框到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中如何做到这一点或如何做到最好。

1 个答案:

答案 0 :(得分:1)

我建议让函数根据传入的参数创建进度条(请注意,如果要在字符串中扩展变量,必须使用双引号):

function New-ProgressBar([int]$index) {
  $bar = New-Object Windows.Forms.ProgressBar
  $loc = (23 * $index) + 12
  $bar.Location = "94, $loc"
  $bar.Name = "progressbar$index"
  $bar:counter.Size = '1109, 23'
  $bar.TabIndex = $index

  return $bar
}

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

$counter = 0
foreach (...) {
  New-Variable -Name "ProgressBar$counter" -Value (New-ProgressBar $counter)
  $counter++
}

我个人更喜欢将进度条放入哈希表而不是单个变量,但是:

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