我正在尝试在字符串中进行一些正常的变量扩展,当它在函数中时,它会出现乱序。
function MakeMessage99($startValue, $endValue) { "Ranges from $startValue to $endValue" }
MakeMessage99(1, 100)
这会返回Ranges from 1 100 to
,然后它会返回Ranges from 1 to 100
答案 0 :(得分:2)
powershell中的函数不应使用括号括起参数。代替:
PS C:\> MakeMessage99 1 100
Ranges from 1 to 100
MakeMessage是你的函数,“1”是第一个位置的参数,“100”是第二个位置的参数。根据{{3}}:
默认情况下,所有函数参数都是位置参数。 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]")]
以验证四位数字)或上面链接中列出的其他验证属性。
答案 1 :(得分:1)
这是PowerShell中常见的陷阱。当你调用...时
MakeMessage99(1, 100)
...您实际上正在传递包含值1
和100
的数组作为第一个参数。要将1
作为第一个参数并将100
作为第二个参数,请使用...
MakeMessage99 1 100