Prova questa:
$(command -arg1 -arg2 | Out-Host;$?) -and $(command2 -arg1 | Out-Host;$?)
Il $() è una sottoespressione che consente di specificare più istruzioni all'interno tra cui una pipeline. Quindi esegui il comando e condividi a Out-Host in modo che tu possa vederlo. Quindi nella prossima istruzione (l'output effettivo della sottoespressione) output $? cioè il risultato del successo dell'ultimo comando.
BTW il $? funziona bene per i comandi nativi (console exe) ma per i cmdlet lascia qualcosa a desiderare. Cioè, $? sembra solo restituire $ false quando un cmdlet rileva un errore di chiusura. Sembra $? ha bisogno di almeno tre stati (fallito, riuscito e parzialmente riuscito). Quindi, se stai usando i cmdlet, funziona meglio:
$(command -arg1 -arg2 -ev err | Out-Host;!$err) -and
$(command -arg1 -ev err | Out-Host;!$err)
Questo tipo di colpi ancora. Forse qualcosa di simile sarebbe meglio:
function ExecuteUntilError([scriptblock[]]$Scriptblock)
{
foreach ($sb in $scriptblock)
{
$prevErr = $error[0]
. $sb
if ($error[0] -ne $prevErr) { break }
}
}
ExecuteUntilError {command -arg1 -arg2},{command2-arg1}
fonte
2010-02-12 15:13:31
Non è '-or' '? – stej
Un OR short-circuiting eseguirà la seconda espressione solo se la prima evalerà a false (fallisce). Sospetto che l'OP voglia che la seconda espressione venga eseguita solo se le prime evalive sono vere (succede) che un cortocircuito e ci dà. –
Chiunque è interessato a Bash in stile '&&' e '' || diventando una parte di PowerShell: si prega di votare per la funzione [qui] (https://windowsserver.uservoice.com/forums/301869-powershell/suggestions/11087898 -i-e-operatori -implement-che-bash-ha). – mklement0