2014-01-12 206 views
-1

爲什麼我不能使用全局變量作爲函數的參數參數....功能的全局變量

function Get-Diskinfo
{param($global:Computername) get-WmiObject win32_logicaldisk -ComputerName $global:Computername}

我需要重複使用的功能變量在其他腳本中。

+1

將來它有助於當你解釋什麼是錯的。你有意想不到的結果嗎?結果是什麼,你爲什麼不期望他們?或者在這種情況下:您是否收到錯誤消息?錯誤消息是什麼? –

+0

有時候一個長問題可能會導致回答者不情願。我曾多次見過它。我試圖保持簡短並且重要。 感謝您指出。 –

回答

4

在param塊中,您可以定義函數所具有的參數的名稱(以及默認值和其他元數據)。 $ global:不能用作參數名稱,因爲它定義了變量的範圍。既然你沒有定義變量,那就沒有意義了。

你想讓你的函數有一個computername參數並給它一個全局變量的默認值嗎?然後你可以做到以下幾點。

function Get-Diskinfo {param($Computername = $global:Computername) 
    get-WmiObject win32_logicaldisk -ComputerName $Computername} 

如果你不關心的參數,總是希望使用全局變量,你可以只是刪除PARAM乾脆。

function Get-Diskinfo { 
    get-WmiObject win32_logicaldisk -ComputerName $global:Computername} 

我通常不會建議上述解決方案。我發現最好不要使用像這樣的全局變量,並且像下面這樣的腳本調用不同的函數。這讓任何讀取或調試代碼的人都更容易理解代碼。全局變量使代碼難以理解,容易出錯並且難以重用。

功能,無需任何全局變量

function Get-Diskinfo {param($Computername) 
    get-WmiObject win32_logicaldisk -ComputerName $Computername} 

腳本調用不同的功能,在同一臺計算機

$MyComputerName = 'client01' 
Get-DiskInfo -ComputerName $MyComputerName 
Get-MoreInfo -ComputerName $MyComputerName 
Get-OtherInfo -ComputerName $MyComputerName