Reemplazos para ampersand y doble ampersand en PowerShell

Reemplazos para ampersand y doble ampersand en PowerShell

En el procesador CMD nativo de Windows, puede utilizar &para encadenar comandos para que uno se ejecute inmediatamente después del otro. A &&ejecutará el segundo comando solo si el primero se completa sin errores.

Esto es diferente de los comandos de tubería junto con |el resultado del primer comando.no esenviado al segundo comando, los comandos simplemente se ejecutan uno tras otro y la salida de cada uno se envía a su lugar habitual.

Sin embargo, aparece un error cuando intento usar &o &&en PowerShell. ¿Hay funciones similares disponibles en PowerShell o esta característica está en desuso?

Respuesta1

El &operador en PowerShell es simplemente ;o Punto y coma.

El &&operador en PowerShell debe ejecutarse como una ifdeclaración.

Command ; if($?) {Command}

Ejemplo:

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

Respuesta2

Pruebe esta función, que se puede utilizar más o menos de la misma manera:

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

Ahora &&se puede reemplazar con ; aa, que si bien aún no es perfecto, es mucho más conciso.

cls && build

se convierte

cls; aa build

Respuesta3

Actualización: Ahora es posible hacerlo de forma nativa con Powershell 7

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

Primer
segundo

Pero si el primer comando falla (aquí tenga en cuenta el Write-Error):

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

Malo

Fuente :https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_pipeline_chain_operators?view=powershell-7.3

información relacionada