另一个变量中的变量扩展(Powershell)

时间:2010-09-10 01:04:16

标签: powershell

所以我有一个从外部脚本动态创建的服务器数组变量。 我现在需要使用每个服务器的复选框列表填充我的GUI表单。在部署到所述服务器时,这将作为选择机制。

由于我不知道我的列表中将有多少台服务器,因此该表单必须动态创建复选框。我遇到的问题是设置这些新变量的参数,并添加到表单中。我只是不知道如何强制PS在复选框变量名称中扩展我的迭代器变量。 这是我目前所拥有的,它将创建我的变量,但不对参数应用更新:

$form1.Text = "Server Selection"
$form1.Name = "form1"
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Width = 235
$System_Drawing_Size.Height = 500
$form1.ClientSize = $System_Drawing_Size
$i = 0
$y = 0
$serverList | %{
    New-Variable -Name "Checkbox$i" -value (New-Object System.Windows.Forms.CheckBox)
    set-variable -name "Checkbox$i.VisualStyleBackColor" -value $true
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 104
    $System_Drawing_Size.Height = 24
    $Checkbox{i}.Size = $System_Drawing_Size
    $Checkbox{i}.TabIndex = $i
    $Checkbox{i}.text = $_
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 60
    $System_Drawing_Point.Y = 21 + $y
    $Checkbox{i}.Location = $System_Drawing_Point
    $Checkbox{i}.DataBindings.DefaultDataSourceUpdateMode = 0
    $Checkbox{i}.name = "server"
    $y = $y + 20
    $i++
    $form1.Controls.Add($Checkbox{i})


}

任何人都知道如何正确地进行扩展或分配?

1 个答案:

答案 0 :(得分:2)

首先回答您的具体问题:

(Get-Variable "Checkbox$i").Value.Size = $System_Drawing_Size

但更一般地说,为什么不将复选框列表存储在数组中并通过索引访问它们?

编辑:让我告诉你。

$Checkboxes = @()
$serverList | %{
    $Checkboxes += New-Object System.Windows.Forms.CheckBox
    $Checkboxes[-1].VisualStyleBackColor = $true
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 104
    $System_Drawing_Size.Height = 24
    $Checkboxes[-1].Size = $System_Drawing_Size
    $Checkboxes[-1].TabIndex = $i
    $Checkboxes[-1].text = $_
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 60
    $System_Drawing_Point.Y = 21 + $y
    $Checkboxes[-1].Location = $System_Drawing_Point
    $Checkboxes[-1].DataBindings.DefaultDataSourceUpdateMode = 0
    $Checkboxes[-1].name = "server"
    $y = $y + 20
    $form1.Controls.Add($Checkboxes[-1])
}