Powershell范围改变?

时间:2016-02-13 13:03:46

标签: arrays powershell scoping

我在更新函数中的全局变量时遇到了问题。我找到了以下文章,看起来很有希望:

Variable scoping in PowerShell

但是,我发现他发布的内容与我看到的输出相符。这是他的代码:

$array=@("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:不起作用,如何在函数内更新函数外的变量?

1 个答案:

答案 0 :(得分:3)

数组在script范围内声明,而不是全局。将数组声明为全局变量:

$global:array=@("g")

或使用脚本范围来更新它:

$script:array += "h"

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