我正在尝试在字符串中进行一些正常的变量扩展,当它在函数中时,它会出现乱序。
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