更改脚本块的父作用域中的局部变量

时间:2014-10-28 17:53:18

标签: powershell

我想提供一个脚本块作为函数的参数。此脚本块应使用其中一个参数更改父级中的局部变量。情况如下:

## 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),但添加不会传播到父作用域。如何才能做到这一点?非常感谢!

1 个答案:

答案 0 :(得分:4)

如果父作用域为scriptglobal作用域,则可以执行以下操作:

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作为全局。