Prueba esto:
$(command -arg1 -arg2 | Out-Host;$?) -and $(command2 -arg1 | Out-Host;$?)
El $() es una sub-expresión que le permite especificar varias instrucciones dentro incluyendo una tubería. Luego ejecuta el comando y canaliza a Out-Host para que puedas verlo. Luego, en la siguiente declaración (la salida real de la subexpresión) ¿salida $? es decir, el resultado de éxito del último comando.
¿Por cierto $? funciona bien para comandos nativos (exe de consola) pero para cmdlets deja algo que desear. Es decir, $? solo parece devolver $ false cuando un cmdlet encuentra un error de terminación. Parece $? necesita al menos tres estados (fallido, exitoso y parcialmente exitoso). Por lo tanto, si usa cmdlets, esto funciona mejor:
$(command -arg1 -arg2 -ev err | Out-Host;!$err) -and
$(command -arg1 -ev err | Out-Host;!$err)
Este tipo de golpes son inmóviles. Tal vez algo como esto sería mejor:
function ExecuteUntilError([scriptblock[]]$Scriptblock)
{
foreach ($sb in $scriptblock)
{
$prevErr = $error[0]
. $sb
if ($error[0] -ne $prevErr) { break }
}
}
ExecuteUntilError {command -arg1 -arg2},{command2-arg1}
¿No es '-o''? – stej
Un quirófano de cortocircuito solo ejecutará la segunda expresión si el primero evalúa a falso (falla). Sospecho que el OP quiere que la segunda expresión se ejecute solo si las primeras evaluaciones son verdaderas (tiene éxito), lo que nos da un cortocircuito. –
Quien esté interesado en '' && 'y' || 'de estilo Bash convirtiéndose en parte de PowerShell: vote por la característica [aquí] (https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11087898 -implement-the-and-operators-that-bash-has). – mklement0