2016-02-13 202 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