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:
переменная увеличивает область действия переменной до ближайшей области родительского файла сценария.