Расширение переменной внутри другой переменной (Powershell) - PullRequest
1 голос
/ 10 сентября 2010

Итак, у меня есть переменная-массив серверов, которая динамически создается из внешнего скрипта. Теперь мне нужно заполнить форму 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 Ответ

2 голосов
/ 10 сентября 2010

Сначала ответьте на свой конкретный вопрос:

(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])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...