我想这样做一些正常的变量扩展在一个字符串中,并且,当它在一个函数中,它出现乱序。字符串扩展正在改变顺序或字符串
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问题都有小型的,易于复制的例子,这些例子很好学习。 –