2014-11-06 21 views
1

我喜歡C#比PS好得多,但是這次我不得不寫一個腳本... 我需要在函數內部改變「全局」變量而不傳遞變量作爲參數。它甚至有可能嗎? 這裏是一個抽象:從PowerShell函數中修改腳本變量值

$a = 0 
$b = 0 
$c = 0 
function Increment($var1, $var2) 
{ 
$a = $var1 
$b = $var2 
$c++ 
} 

不同於C#,在PS函數變量是功能範圍的約束,它們保持功能的範圍不變外,如果如上述那樣使用。我怎樣才能使這個工作,以便通過引用訪問腳本變量?

+0

的可能的複製[如何修改父範圍變量使用Powershell](http://stackoverflow.com/questions/6766722/how-to-modify-parent-scope-variable-using-powershell)。 – rrirower 2014-11-06 16:47:13

+3

使用'$ script:a'' $ script:b'等.... – arco444 2014-11-06 16:50:01

+0

通常這違反了函數的目的(改變它自己範圍之外的變量)。您可以修改父範圍內的變量,但通常還有其他方法可以解決該問題。請記住,PowerShell可以從函數返回多個值。 – 2014-11-06 17:27:41

回答

2

嘗試使用PowerShell的全局變量定義:

$global:a = 0 
$global:b = 0 
$global:c = 0 
function Increment($var1, $var2) 
{ 
    $global:a = $var1 
    $global:b = $var2 
    $global:c++ 
} 
2

如果你真的需要參考修改,你可以使用[Ref],如:

$a = 1 
function inc([Ref] $v) { 
    $v.Value++ 
} 
inc ([Ref] $a) 
$a # outputs 2