Powershell с графическим интерфейсом не установит переменную

Я изучаю Powershell и пытаюсь создать интерфейс GUI, как в примере здесь.

Тем не менее, когда я запускаю это как есть, $x никогда не определяется. Есть идеи, что я могу делать не так? Я знаю, что это как-то связано с:

$OKButton.Add_Click({$x=$objListBox.SelectedItem;$objForm.Close()})

Потому что, если я изменю это на:

$OKButton.Add_Click({Write-Host "worked";$objForm.Close()})

Это возвращает worked,

1 ответ

Решение

Ваш блок действий работает в отдельной локальной области. Чтобы изменить глобальную (сессионную) переменную, используйте модификатор области ($global:varname). Например:

$OKButton.Add_Click({$global:x=$objListBox.SelectedItem;$objForm.Close()})

Подробнее о сферах в Technet - about_Scopes (или напишите Get-Help about_scopes в PowerShell)

Вместо того $Global:variable можно также использовать $Script:variableчто увеличит объем вашей переменной до вашего скрипта. Следовательно, если вы используете функцию A для создания кнопок и внутри функции, у вас также есть.Add_Click({})функция, она будет работать в рамках вашей функции. В$Script: переменная увеличивает область действия переменной до ближайшей области родительского файла сценария.

Другие вопросы по тегам