我正在学习Powershell,并试图创建一个GUI界面,就像这里的例子一样。
然而,当我按原样运行时,$x
从未被定义。你知道我做错了什么吗?我知道这与有关
$OKButton.Add_Click({$x=$objListBox.SelectedItem;$objForm.Close()})
因为如果我把它改成:
$OKButton.Add_Click({Write-Host "worked";$objForm.Close()})
它确实返回worked
。
您的操作块在单独的本地作用域中运行。要修改全局(会话范围)变量,请使用作用域修饰符($global:varname
)。例如:
$OKButton.Add_Click({$global:x=$objListBox.SelectedItem;$objForm.Close()})
有关Technet上作用域的更多信息-about_scopes(或在PowerShell中写入Get-Help about_scopes
)
也可以使用$Script:variable
来代替$Global:variable
,这将增加脚本中变量的范围。因此,如果您使用A函数创建按钮,并且在该函数中还具有.Add_Click({})
函数,则它将在您的函数范围内工作。$Script:
变量将变量的作用域增加到最近的父脚本文件作用域。