2013-09-10 73 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