我目前正在编辑用于AD的新员工脚本,遇到一个问题,我为主文件夹添加了两个单选按钮,一个单选按钮会将BaseHomeFolderPath更新为Path1,第二个将其更新为Path2,我将变量导出到csv以验证其是否有效,但始终显示空白。我不知道这是示波器问题还是我做错了,任何帮助将不胜感激!下面是代码的副本。
我尝试使用$ script :,但也没有用。
$BaseHomeFolderPath = ''
Set-Variable -Name $BaseHomeFolderPath -Scope Global
$radiobuttonAtlas_MouseClick = [System.Windows.Forms.MouseEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.MouseEventArgs]
#TODO: Place custom script here
$BaseHomeFolderPath = '\\path1\users'
}
$radiobuttonCerberus_MouseClick=[System.Windows.Forms.MouseEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.MouseEventArgs]
#TODO: Place custom script here
$BaseHomeFolderPath = '\\path2\users'
}
$buttonRun_MouseClick=[System.Windows.Forms.MouseEventHandler]{
#Event Argument: $_ = [System.Windows.Forms.MouseEventArgs]
#TODO: Place custom script here
$TestValue = New-Object System.Object
$TestValue | Add-Member -MemberType NoteProperty -Name "Path" -Value $BaseHomeFolderPath
$TestValue | Export-CSV -NoTypeInformation -Path "C:\Users\testuser\Desktop\Testcsv.csv"
}
我希望将BaseHomeFolderPath变量更新为选中的任何单选按钮。
答案 0 :(得分:0)
tl; dr
为了更新 script 范围内的$BaseHomeFolderPath
变量,必须在该范围内明确引用它:
$script:BaseHomeFolderPath = '\\path1\users'
否则,您将在运行事件处理程序的子作用域中通过该名称隐式创建一个 local变量。
在PowerShell中,当您使用$var = ...
分配给变量时,您要么:
更新在同一范围内创建的预先存在的变量。
或在当前范围内隐式创建一个新变量 。
棘手的部分是,即使子作用域请参见在父作用域中创建的变量,并且只能按名称获取其值,将其分配给它们仅按名称创建一个 new 范围本地变量,然后该新变量将阴影覆盖在当前范围中的原始变量和所有子对象范围。
一个简单的演示,使用调用运算符&
在子范围内执行脚本块({ ... }
):
$var = 'parent'
"in parent: before: $var"
& {
"in child: before: $var" # sees $var from parent scope
$var = 'child' # creates new $var in current scope
"in child: after: $var" # sees new $var, which shadows the parent's
}
"in parent: after: $var" # still has original value
此打印:
in parent: before: parent
in child: before: parent
in child: after: child
in parent: after: parent
有关更多信息,请参见:
this answer的最后一部分,提供了简要摘要。