2014-10-28 73 views
2

我想提供一个脚本块作为函数的参数。这个脚本块应该改变父代的局部变量,使用它的一个参数。这种情况如下:更改脚本块的父范围中的局部变量

## 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),但除了不传播到父范围。如何才能做到这一点?非常感谢!

回答

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

+0

好的,我应该更精确。该函数实际上是在另一个模块中定义的自定义类的ScriptMethod,并且方法调用位于脚本中...您的解决方案是否可以适应这种情况? – Sh4pe 2014-10-28 18:03:38

+0

@ Sh4pe查看最新的答案。 – 2014-10-28 18:04:37

+0

完美。有用。感谢您回答如此之快 – Sh4pe 2014-10-28 18:07:51