Powershell 范围改变?

Powershell scoping change?

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

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: 不起作用,我如何从函数内部更新函数外部的变量?

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

$global:array=@("g")

或使用脚本范围更新它:

$script:array += "h"

我建议后者,因为将全局变量用于仅脚本需要的东西有点多余。