То, что должен делать Bash, заключается в неявной передаче кода выхода команд в Boolean при передаче логическим операторам. PowerShell этого не делает, но может быть сделана функция для обертывания команды и создания такого же поведения:
> function Get-ExitBoolean($cmd) { & $cmd | Out-Null; $? }
( $? - это bool, содержащий успех последнего кода выхода )
Для двух пакетных файлов:
#pass.cmd
exit
и
#fail.cmd
exit /b 200
... поведение может быть проверено:
> if (Get-ExitBoolean .\pass.cmd) { write pass } else { write fail }
pass
> if (Get-ExitBoolean .\fail.cmd) { write pass } else { write fail }
fail
Логические операторы должны оцениваться так же, как в Bash. Сначала установите псевдоним:
> Set-Alias geb Get-ExitBoolean
Тест:
> (geb .\pass.cmd) -and (geb .\fail.cmd)
False
> (geb .\fail.cmd) -and (geb .\pass.cmd)
False
> (geb .\pass.cmd) -and (geb .\pass.cmd)
True
> (geb .\pass.cmd) -or (geb .\fail.cmd)
True