Я получаю сообщение об ошибке:

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, оператор будет работать, как ожидалось.

2
ProfessionalAmateur 28 Мар 2013 в 21:51

1 ответ

Лучший ответ

Я не могу точно сказать, почему ему не нравится ваш синтаксис, но это сработает:

if (($TicketNumber.length -gt 0) -and (IsNumeric $TicketNumber) -and (IsNotVoid $DateOut))

Это заставляет PowerShell использовать вывод выражения в круглых скобках.

Я также исправил вызовы функций. В синтаксисе PowerShell указано, что функции вызываются без скобок и путем разделения аргументов пробелами.

4
Poorkenny 28 Мар 2013 в 21:58
Спасибо. Это странно. Я отмечу этот ответ как правильный через несколько минут (еще 5 не подпущу)
 – 
ProfessionalAmateur
28 Мар 2013 в 22:01