我正在创建一个ps脚本来处理不同的用户命令。 由于用户可以调用的每个函数都有不同数量的参数,我只想将从索引1开始的其余usrInput []数组作为usrInput [0]函数的参数传递。
这就是我所做的:
$function
while($function -ne "backup" -or $function -ne "restore") { #Wait for user to make a valid input
$usrInput = Read-Host "Enter -backup args[] or -restore args[] to backup or restore vms" -split " "
$args
for ($i = 1, $i -le $usrInput.Length, $i++) {
$args[$i -1] = $usrInput[$i]
}
if ($usrInput[0] -eq "-backup") {
backup($args)
}
elseif ($usrInput[0] -eq "-restore") {
restore($args)
}
}
现在得到的是以下内容(英语等同于德语shell输出):
Enter -backup args[] or -restore args[] to back
"last comment in my code"
"1" couln't be compared to "96 62".
couldn't be converted to "System.Int32"
in line :5 letter:6
+ for ($i = 1, $i -le $inputLength, $i++) {
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation:
+ FullyQualifiedErrorId : ComparisonFailure
Enter -backup args[] or -restore args[] to back
为什么?
我认为array.Length
的类型是int!?
(注意:我也尝试过把[int]
放在它面前,但它没有用)
非常感谢您的帮助。
答案 0 :(得分:2)
问题是for语句你应该这样写:
for ($i = 1; $i -le $input.Length; $i++)
与";"而不是","。
我没有检查其余的代码,因为你的问题是关于$ input.length和int32。