2013-09-10 109 views
3

我想這樣做一些正常的變量擴展在一個字符串中,並且,當它在一個函數中,它出現亂序。字符串擴展正在改變順序或字符串

function MakeMessage99($startValue, $endValue) { "Ranges from $startValue to $endValue" } 

MakeMessage99(1, 100) 

這將返回Ranges from 1 100 to那麼它應該返回Ranges from 1 to 100

回答

2

功能在PowerShell中不應該用括號括參數。相反:

PS C:\> MakeMessage99 1 100 
Ranges from 1 to 100 

哪裏MakeMessage是你的功能,「1」是在第一個位置的參數,而「100」是在第二位置的參數。根據about_Functions_Advanced_Parameters

默認情況下,所有功能參數都是位置的。 Windows PowerShell將位置編號按參數在函數中聲明的順序分配給參數。

Powershell有幾種檢查輸入的方法。您可以將輸入轉換爲數字類型。還有一些參數的驗證方法可以防止將來出現這種錯誤。如果你真的想要一個整數,簡單的強制轉換會導致數組無效輸入。例如:

function MakeMessage99 { 
    Param 
    (
    [int]$startValue, 
    [int]$endValue 
) 

    "Ranges from $startValue to $endValue" 
} 

你也可以探索範圍驗證(如[ValidateRange(0,100)]),圖案驗證(如[ValidatePattern("[0-9][0-9][0-9][0-9]")]驗證一個四位數字)或在上面的鏈接列出的其他驗證屬性。

+0

哎呀。 Powershell不斷讓我感到蠢。我弄糊塗了調用框架方法的語法(似乎喜歡括號)。很好的描述性答案,順便說一句。 – Luggage

+0

不用擔心。通過[powershell標籤](http://stackoverflow.com/questions/tagged/powershell?sort=votes&pageSize=50)中的問題查看接受的答案。很多PowerShell問題都有小型的,易於複製的例子,這些例子很好學習。 –

1

這是PowerShell中的一個常見錯誤。當你調用...

MakeMessage99(1, 100) 

...你實際上是傳遞一個包含價值1100作爲第一個參數的數組。要通過1作爲第一個參數和100作爲第二個參數,使用...

MakeMessage99 1 100