PowerShell Add-Member ScriptMethod - 无法设置变量值

PowerShell Add-Member ScriptMethod - cannot set variable value

我正在尝试在我尝试使用 Add-Member 附加到对象的脚本方法中设置变量值。我做错了什么?

$a = "old value";
$obj = New-Object -TypeName "System.Object"
Add-Member -InputObject $obj -Name Info -Value { param($msg) $a = $msg; } -MemberType ScriptMethod
$obj.Info("123");
Write-Host "a = $a";

我预计输出为 a = 123,但我看到 a = old value。我认为这个问题与范围界定有关(在脚本方法内部,$a 必须表示不同的变量,因为该值未维护)。如何设置已有的 $a 变量的值?

你说得对 Scoping

如果您将 $a 设为全局 $global:a 或为其提供脚本作用域 $script:a,则以下工作:

$script:a = "old value"
$obj = New-Object -TypeName "System.Object"
Add-Member -InputObject $obj -Name Info -Value { param($msg) $script:a = $msg; } -MemberType ScriptMethod
$obj.Info("123")

Write-Host "a = $script:a"

输出:

a = 123