Arrays Powershell作用域更改?

Arrays Powershell作用域更改?,arrays,powershell,scoping,Arrays,Powershell,Scoping,我一直在更新函数中的全局变量时遇到问题。我发现了以下文章,看起来很有希望: 然而,我发现他发布的内容与我看到的结果不符。这是他的密码: $array=@("g") function foo() { $array += "h" Write-Host $array } & { $array +="s" Write-Host $array } foo Write-Host $array 他的结果是: g s g h g 然而。。。我在PowerShel

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

然而,我发现他发布的内容与我看到的结果不符。这是他的密码:

$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"

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

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

$global:array=@("g")
或者使用脚本作用域来更新它:

$script:array += "h"

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

旁注:在ISE中,我得到了预期的结果。但是当从我的.ps1运行它时,我得到了上面的结果。旁注:在ISE中,我得到了预期的结果。但是当从我的.ps1运行它时,我得到了上面的信息。这几乎是我所缺少的。。。。为了使该宣言发挥作用,还必须将其添加为$global:。我也同意将范围限定到$script:是一个更好的总体选择,并且在我的实际PS脚本中起到了预期的作用。谢谢这正是我所缺少的。。。。为了使该宣言发挥作用,还必须将其添加为$global:。我也同意将范围限定到$script:是一个更好的总体选择,并且在我的实际PS脚本中起到了预期的作用。谢谢