conditional execution (&& and ||) in powershell conditional execution (&& and ||) in powershell powershell powershell

conditional execution (&& and ||) in powershell


2019: the Powershell team are considering adding support for && to Powershell - weigh in at this GitHub PR

Try this:

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

The $() is a subexpression allowing you to specify multiple statements within including a pipeline. Then execute the command and pipe to Out-Host so you can see it. The next statement (the actual output of the subexpression) should output $? i.e. the last command's success result.


The $? works fine for native commands (console exe's) but for cmdlets it leaves something to be desired. That is, $? only seems to return $false when a cmdlet encounters a terminating error. Seems like $? needs at least three states (failed, succeeded and partially succeeded). So if you're using cmdlets, this works better:

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

This kind of blows still. Perhaps something like this would be better:

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


Powershell 7 preview 5 has them. I don't know why this was deleted with no notification or explanation. https://devblogs.microsoft.com/powershell/powershell-7-preview-5/ This will give the output of both commands, as the question requested.

echo 'hello' && echo 'there'hellothereecho 'hello' || echo 'there'hello


To simplify multistep scripts where doThis || exit 1 would be really useful, I use something like:

function ProceedOrExit {     if ($?) { echo "Proceed.." } else { echo "Script FAILED! Exiting.."; exit 1 } }doThis; ProceedOrExitdoNext# or for long doosdoThisProceedOrExitdoNext