2013-03-28 2 views
2

я получаю ошибку:Powershell дает ошибку при попытке использовать й в операторе If

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

ответ

4

Я не могу точно сказать, почему она не любит синтаксис, но это будет работать:

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

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

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

+0

Спасибо. Это странно. Я помету этот ответ правильно через несколько минут (не дам мне еще 5) – ProfessionalAmateur

Смежные вопросы