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
我正在尝试在我尝试使用 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