繁体   English   中英

Powershell 在函数中迭代变量名

[英]Powershell iterate variable name in function

我当前的目标是创建一个可以生成 $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 中还有其他什么方法或如何最好地完成此操作。

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

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++
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM