Замены амперсанда и двойного амперсанда в PowerShell

Замены амперсанда и двойного амперсанда в PowerShell

В собственном процессоре CMD Windows вы можете использовать &для связывания команд вместе, чтобы одна выполнялась сразу после другой. A &&выполнит вторую команду только в том случае, если первая завершится без ошибок.

Это отличается от объединения команд в один поток с |выводом первой команды.не являетсяотправляются второй команде, команды просто запускаются одна за другой, и вывод каждой отправляется в обычное место.

Однако я получаю сообщение об ошибке при попытке использовать &или &&в PowerShell. Есть ли аналогичные функции в PowerShell или эта функция устарела?

решение1

Оператор &в PowerShell — это просто ;точка с запятой или «или».

Оператор &&в PowerShell должен быть запущен как ifинструкция.

Command ; if($?) {Command}

Пример:

tsc ; if($?) {node dist/run.js}

решение2

Попробуйте эту функцию, которую можно использовать примерно таким же образом:

function aa() {
    if($?) {
        $command = [string]::join(' ', $args[1..99])
        & $args[0] $command
    }
}

Теперь &&можно заменить на ; aa, что, хотя и не идеально, но гораздо более лаконично.

cls && build

становится

cls; aa build

решение3

Обновление: теперь это можно сделать с помощью Powershell 7.

Write-Output 'First' && Write-Output 'Second'

Первая
секунда

Но если первая команда не сработает (обратите внимание на Write-Error):

Write-Error 'Bad' && Write-Output 'Second'

Плохой

Источник :https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_pipeline_chain_operators?view=powershell-7.3

Связанный контент