我想這樣做一些正常的變量擴展在一個字符串中,並且,當它在一個函數中,它出現亂序。字符串擴展正在改變順序或字符串
function MakeMessage99($startValue, $endValue) { "Ranges from $startValue to $endValue" }
MakeMessage99(1, 100)
這將返回Ranges from 1 100 to
那麼它應該返回Ranges from 1 to 100
我想這樣做一些正常的變量擴展在一個字符串中,並且,當它在一個函數中,它出現亂序。字符串擴展正在改變順序或字符串
function MakeMessage99($startValue, $endValue) { "Ranges from $startValue to $endValue" }
MakeMessage99(1, 100)
這將返回Ranges from 1 100 to
那麼它應該返回Ranges from 1 to 100
功能在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]")]
驗證一個四位數字)或在上面的鏈接列出的其他驗證屬性。
這是PowerShell中的一個常見錯誤。當你調用...
MakeMessage99(1, 100)
...你實際上是傳遞一個包含價值1
和100
作爲第一個參數的數組。要通過1
作爲第一個參數和100
作爲第二個參數,使用...
MakeMessage99 1 100
哎呀。 Powershell不斷讓我感到蠢。我弄糊塗了調用框架方法的語法(似乎喜歡括號)。很好的描述性答案,順便說一句。 – Luggage
不用擔心。通過[powershell標籤](http://stackoverflow.com/questions/tagged/powershell?sort=votes&pageSize=50)中的問題查看接受的答案。很多PowerShell問題都有小型的,易於複製的例子,這些例子很好學習。 –