Saltar al contenido

¿Cómo ejecuto varios comandos en una línea en PowerShell?

Te traemos la respuesta a este enigma, o por lo menos eso creemos. Si continuas con alguna duda puedes escribirlo en el apartado de preguntas y sin pensarlo

Solución:

Use un punto y coma para encadenar comandos en PowerShell:

ipconfig /release; ipconfig /renew

Un punto y coma vinculará los comandos como se indicó en la respuesta anterior, aunque hay un key diferencia en el comportamiento con el & operador en el intérprete de comandos de estilo MS-DOS.

En el intérprete de comandos, la sustitución de variables tiene lugar cuando se lee la línea. Esto permite algunas posibilidades claras, como el intercambio de variables sin un intermedio:

set a=1
set b=2
set a=%b% & set b=%a%
echo %a%
echo %b%

Daría como resultado:

2
1

Que yo sepa, no hay forma de replicar este comportamiento en PowerShell. Algunos pueden argumentar que eso es algo bueno.

De hecho, hay una manera de hacer esto en PowerShell:

$b, $a = $a, $b

Dará como resultado un intercambio de una sola línea de los valores de las variables.

En PowerShell 7, tenemos Pipeline chain operators que le permite agregar algún elemento condicional a sus comandos secuenciales de una línea

Los operadores son:

  • && esto ejecutará el segundo comando solo si el primero tiene éxito.
  • || esto ejecutará el segundo comando solo si el primero falla.

ejemplos:

PS Z:Powershell-Scripts> Write-Host "This will succeed" && Write-Host "So this will run too"
This will succeed
So this will run too

PS Z:Powershell-Scripts> Write-Error "This is an error" && Write-Host "So this shouldn't run"
Write-Error "This is an error" && Write-Host "So this shouldn't run": This is an error

PS Z:Powershell-Scripts> Write-Host "This will succeed" || Write-Host "This won't run"
This will succeed

PS Z:Powershell-Scripts> Write-Error "This is an error" || Write-Host "That's why this runs"
Write-Error "This is an error" || Write-Host "That's why this runs": This is an error
That's why this runs

por supuesto, puedes encadenarlos aún más como x && y || z etc.

esto también funciona para comandos antiguos tipo cmd como ipconfig

PS Z:Powershell-Scripts> ipconfig && Write-Error "abc" || ipconfig


Windows-IP-Konfiguration


Ethernet-Adapter Ethernet:

   Verbindungsspezifisches DNS-Suffix: xxx
   Verbindungslokale IPv6-Adresse  . : xxx
   IPv4-Adresse  . . . . . . . . . . : xxx
   Subnetzmaske  . . . . . . . . . . : 255.255.255.0
   Standardgateway . . . . . . . . . : xxx
ipconfig && Write-Error "abc" || ipconfig: abc

Windows-IP-Konfiguration


Ethernet-Adapter Ethernet:

   Verbindungsspezifisches DNS-Suffix: xxx
   Verbindungslokale IPv6-Adresse  . : xxx
   IPv4-Adresse  . . . . . . . . . . : xxx
   Subnetzmaske  . . . . . . . . . . : 255.255.255.0
   Standardgateway . . . . . . . . . : xxx

Estos operadores usan el $? y $LASTEXITCODE variables para determinar si una canalización falló. Esto le permite usarlos con comandos nativos y no solo con cmdlets o funciones.

Fuente: https://docs.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-70?view=powershell-7

valoraciones y comentarios

Agradecemos que desees añadir valor a nuestro contenido participando con tu veteranía en las explicaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *