2013-10-21 69 views
0

對於一個腳本,應該是兼容的PowerShell 2,我已經聲明瞭一個名爲$ exeLoc PARAM如下: 參數( [參數()] 【別名( 「厄爾尼諾」) ] $ exeLoc = '...... \ SW')的PowerShell:腳本不能設置參數

我嘗試設置該參數,相對於絕對的功能,如下所示:

Function FromRelToAbs() 
{ 
    Push-Location $exeLoc 
    $Global:exeLoc = (Join-path $PWD -ChildPath '\Vis.exe') 
    Pop-Location 
} 

但是,調用後函數上面,$ exeLoc的值不會改變。

上述代碼在powersell v3和powershell v2 ISE中完美工作。它不能在PowerShell v2窗口(不是ISE)上正常工作

任何想法?

+0

全球範圍聽起來很腥。參數是其功能的局部變量;如果你從聲明參數的那個函數調用那個函數,你可能意味着'$ parent:exeLoc'嗎? – Joey

+0

這是一個腳本參數,不是函數參數;即這是在腳本的開頭聲明的,我的意思是讓它們用作全局變量。我錯了嗎? – b3bel

+0

在這種情況下,我認爲'腳本'範圍會更合適。但說實話,我沒有太多的使用各種示波器的經驗。 – Joey

回答

0

我把它你的腳本是沿着這些路線的東西:

param($x = 2) 

write-output "[script] Value of x is 2" 

function blah { 
    $global:x = 5 
    write-output "[blah] Setting x as 5" 
} 

Write-Output "Calling function blah" 
blah 
Write-Output "[script] Value of x is $x" 

您設定在腳本中的變量;腳本內部是一個函數,它引用全局範圍中的變量並設置其值。

如果我在我的機器(PowerShell v2)上嘗試上述操作,它會正確設置變量。也許我理解你的腳本錯了?

+0

這基本上是我想要做的。唯一的區別是我有一個func在'blah'之前和之後打印$ x值。在我的機器上,ps v2,這隻適用於ISE。在一個shell中,它不會設置$ x ... – b3bel

+1

我意識到它爲什麼對我有用,但不是你。我點了腳本(習慣!),而你正在運行它。 當點源腳本時,只有一個全局範圍,但通常運行腳本時會有全局範圍和腳本範圍。所以,當你設置$ global:var時,你實際上改變了全局範圍內的變量,而不是腳本範圍內的變量。將$ global:更改爲$ script:在你的代碼中,它應該可以工作。 –