2

エラーが発生します:

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

1 に答える 1

4

あなたの構文が気に入らない理由を正確に言うことはできませんが、これはうまくいきます:

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

これにより、PowerShell は括弧内の式の出力を使用するようになります。

関数呼び出しも修正しました。PowerShell 構文では、関数はかっこなしで呼び出され、引数はスペースで区切られます。

于 2013-03-28T17:58:58.763 に答える