2016-02-13 154 views
0

我一直在更新函数中的全局变量的问题。我发现下面的文章,这看起来前途无量:Powershell范围更改?

Variable scoping in PowerShell

然而,我发现,没有他张贴匹配我看到的输出。这是他的代码:

[email protected]("g") 
function foo() 
{ 
    $array += "h" 
    Write-Host $array 
} 

& { 
    $array +="s" 
    Write-Host $array 
} 
foo 

Write-Host $array 

而且他的成绩:

g s 
g h 
g 

但是...我上的PowerShell 5.0的结果是:

s 
h 
g 

加入$global:array += "s"建议的解决方案提供了:

g 
h 
g 

我错过了什么,如何纠正它?如果$ global:不起作用,如何从函数内更新函数外部的变量?

+0

备注:在ISE中,我得到了预期的结果。但是,从.ps1运行它时,我可以看到上面的内容。 – SaintFrag

回答

3

该数组声明为script范围,而不是全局。无论是声明数组作为全局变量:

$global:[email protected]("g") 

,或者使用脚本范围更新:

$script:array += "h" 

我建议后者,因为使用全局变量的东西只有你的脚本需要的是有点多余。

+0

这差不多是我错过了......声明必须添加为$ global:以及它的工作。我也同意,对$ script的范围:是一个更好的整体选项,并在我的实际PS脚本中按预期工作。谢谢! – SaintFrag