我收到错误:
You must provide a value expression on the right-hand side of the '-and' operator.
At C:\shippinginterface\test.ps1:28 char:39
+ if (($TicketNumber.length -gt 0) -and <<<< IsNumeric($TicketNumber) -and IsNotVoid($DateOut))
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : ExpectedValueExpression
运行此测试脚本时。
function IsNumeric($value) {
return ($($value.Trim()) -match "^[-]?[0-9.]+$")
}
function IsNotVoid($value) {
$VoidPattern = [regex]"(?i)void"
return !$VoidPattern.Match($value).Success
}
############################
# START TEST
############################
$TicketNumber = "12345"
$DateOut = "3/14/2013"
## Verify there is a numeric ticket number, and row is not void for any reason
if (($TicketNumber.length -gt 0) -and IsNumeric($TicketNumber) -and IsNotVoid($DateOut))
{
write-host $intRow " " $TicketNumber
}
为什么我不喜欢使用-and
?如果我删除了string.length的第一个评估,则该语句按预期工作。
答案 0 :(得分:4)
我不能确切地说为什么它不喜欢你的语法,但这会起作用:
if (($TicketNumber.length -gt 0) -and (IsNumeric $TicketNumber) -and (IsNotVoid $DateOut))
这迫使PowerShell在括号之间使用表达式的输出。
我还修复了函数调用。 PowerShell语法声明函数在没有括号的情况下调用,并通过用空格分隔参数。