Powershell:无法将array.Length与int32进行比较

时间:2014-11-18 09:46:13

标签: powershell comparison invalidoperationexception

我正在创建一个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]放在它面前,但它没有用)

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

问题是for语句你应该这样写:

for ($i = 1; $i -le $input.Length; $i++)

与";"而不是","。

我没有检查其余的代码,因为你的问题是关于$ input.length和int32。