2014-09-19 67 views
1

我想有一個腳本既可執行代碼和功能,如下所示:PowerShell參數是否需要位於腳本的前面?

function CopyFiles { 
Param(...) 
... 
} 

// Parameter for the script 
param (...) 

// Executable code 

不過,我碰到下面的錯誤:「賦值表達式是無效的輸入到。賦值運算符必須是能夠接受賦值的對象,例如變量或屬性「

當我在函數的尾部列出函數時,它說函數名稱是未定義的。如何從同一腳本中的可執行代碼調用PowerShell功能?

+1

您的函數定義只需在調用之前但在param關鍵字之後聲明。 – Matt 2014-09-19 18:34:50

回答

8

正確的順序是:

1.Script參數

# Parameter for the script 
param([string]$foo) 

2.功能。定義

3.Script代碼

# Executable code 
CopyFiles $foo $bar 

爲什麼你想它以任何其他方式?

+2

爲了完整:在技術上,只要每個函數在調用之前定義,就可以混合使用腳本代碼和函數定義。但是,這隻會使代碼難以維護,所以最好先定義函數並將實際腳本代碼放在最後。 – 2014-09-20 10:19:45

1

參數首先總是。在爲腳本提供參數輸入的時候,我有一個類似的問題。你的腳本應該去:

param (. . .) 
# functions 
# script body 

出於某種原因,PowerShell的解析引擎並不領情不是一個腳本的第一行帕拉姆關鍵字,不包括註釋行。你也可以這樣做:

param (
# params must be at the top of the file 
) 

你也可以檢查,看看您的參數已經宣佈,或者如果他們有使用Get-變量所需的輸入。另一件事;如果你想將數據轉換爲某種類型,如System.Boolean,我會在param塊和BEFORE函數之後執行。如果在參數聲明中將類型轉換爲System.Boolean,那麼如果運行腳本的用戶不以布爾值提交輸入參數,則比使用.NET System.Convert更難之後將值轉換爲靜態方法,並檢查它的評估結果。

相關問題