42

There's already question addressing my issue (Can I get && to work in Powershell?), but with one difference. I need an OUTPUT from both commands. See, if I just run:

(command1 -arg1 -arg2) -and (command2 -arg1)

I won't see any output, but stderr messages. And, as expected, just typing:

command1 -arg1 -arg2 -and command2 -arg1 

Gives syntax error.

4

7 に答える 7

41

2019 : Powershell チームは、Powershellへのサポートの追加を検討して&&います - この GitHub PR で検討してください

これを試して:

$(command -arg1 -arg2 | Out-Host;$?) -and $(command2 -arg1 | Out-Host;$?)

これ$()は、パイプラインを含む複数のステートメントを指定できる部分式です。次に、コマンドとパイプを実行して、Out-Host表示できるようにします。次のステートメント (部分式の実際の出力) は$?、最後のコマンドの成功結果を出力する必要があります。


ネイティブ コマンド (コンソール exe) では正常に$?動作しますが、コマンドレットでは、何かが必要になります。つまり、コマンドレットで終了エラーが発生した場合に$?のみ戻るようです。少なくとも 3 つの状態 (失敗、成功、部分的に成功) が必要$falseなようです。$?したがって、コマンドレットを使用している場合、これはより適切に機能します。

$(command -arg1 -arg2 -ev err | Out-Host;!$err) -and 
$(command -arg1 -ev err | Out-Host;!$err)

この種の打撃はまだです。おそらく、次のようなものが良いでしょう:

function ExecuteUntilError([scriptblock[]]$Scriptblock)
{
    foreach ($sb in $scriptblock)
    {
        $prevErr = $error[0]
        . $sb
        if ($error[0] -ne $prevErr) { break }
    }
}

ExecuteUntilError {command -arg1 -arg2},{command2-arg1}
于 2010-02-12T15:13:31.090 に答える
3

doThis ||を使用するマルチステップ スクリプトを簡素化するには 出口 1は本当に便利です。私は次のようなものを使用します。

function ProceedOrExit { 
    if ($?) { echo "Proceed.." } else { echo "Script FAILED! Exiting.."; exit 1 } 
}

doThis; ProceedOrExit
doNext

# or for long doos
doThis
ProceedOrExit
doNext
于 2013-11-26T09:38:42.957 に答える