我想提供一个脚本块作为函数的参数。此脚本块应使用其中一个参数更改父级中的局部变量。情况如下:
## function definition
function test {
param( [scriptblock]$sb )
$sb.Invoke( 5 )
}
## this is my local variable
$localVariable = 10
## update the local variable using a script block
test( { param( $m ) write-host "local: $localVariable"; $localVariable += 5 } )
调用似乎能够看到局部变量(它打印10),但添加不会传播到父作用域。如何才能做到这一点?非常感谢!
答案 0 :(得分:4)
如果父作用域为script
或global
作用域,则可以执行以下操作:
test { param( $m ) write-host "local: $localVariable"; $script:localVariable += 5 }
对于任意父作用域,请尝试:
test { param( $m ) write-host "local: $localVariable"; Set-Variable -Scope 1 -Name localVariable -Value ($localVariable += 5) }
您可能需要摆弄范围参数。当我从控制台执行此操作时,我不得不使用2将其更改为$ localVariable作为全局。