Búsqueda de sitios web

Espere a que finalice el comando en PowerShell [6 formas]


Usando el cmdlet Start-Process

Utilice Start-Process con el parámetro -Wait para esperar a que finalice el comando.

Utilice Iniciar proceso con el parámetro -Esperar:

Start-Process explorer -Wait

PRODUCCIÓN :

En el resultado anterior, podemos ver que el comando espera hasta que se abre el explorador de archivos. Para hacer eso, usamos Start-Process con el parámetro -Wait. El cmdlet Start-Process se utiliza para iniciar uno o varios procesos en la máquina local. De forma predeterminada, crea un nuevo proceso, que hereda cada variable de entorno definida en el proceso actual.

A continuación, especificamos el nombre del proceso precedido por el cmdlet Start-Process. Podemos especificar un script, ejecutable o archivo que se abrirá usando un programa en nuestra computadora local. Recuerde, si mencionamos un archivo no ejecutable, entonces el cmdlet Start-Process iniciará el programa asociado con el archivo dado.

El Start-Process nos permite usar varias opciones y parámetros; uno de ellos es el parámetro -Wait, lo que significa que este cmdlet en particular esperará a que finalice el proceso mencionado, incluidos sus descendientes, antes de obtener más entradas. Este parámetro retendrá una ventana o suprimirá el símbolo del sistema hasta que finalice el proceso especificado.

También podemos configurar un temporizador para que espere antes de continuar con el siguiente comando. Aquí es donde el comando Timeout entra en escena. Consulte el siguiente ejemplo para aprender a utilizar el cmdlet Start-Process con el comando Timeout.

Utilice Start-Process con el comando Timeout para esperar a que finalice un período de tiempo específico antes de ejecutar el siguiente comando.

Utilice el comando Iniciar proceso con tiempo de espera:

Start-Process explorer; Timeout 5; Write-Host "The explorer process has been started"

PRODUCCIÓN :

Aquí, iniciamos el proceso y ejecutamos el cmdlet Write-Host después de esperar 5 segundos. Puede ver la cuenta regresiva en el lado izquierdo de la consola PowerShell. Para el ejemplo de código anterior, es esencial comprender el flujo de ejecución. Primero, el proceso se inició utilizando el cmdlet Start-Process. ¿Qué es este cmdlet y por qué lo usamos? Ya hemos aprendido esto usando el parámetro -Wait anterior.

En segundo lugar, se ejecutó el comando Timeout para esperar el número de segundos indicado. Una vez que terminó el cronómetro, se ejecutó el cmdlet Write-Host, que mostró un mensaje en la consola de PowerShell. Finalmente, se utilizó el cmdlet Write-Host para escribir una salida/mensaje personalizado en el host; aquí, el host significa consola PowerShell.

Si está utilizando Windows PowerShell versión 5.0 o superior, debe saber que Write-Host es el contenedor de Write-Information. Entonces, ¿cuál es la ventaja de eso? Esto nos permite usar Write-Host para emitir resultados a un flujo de información, lo que permite la supresión o captura de datos escritos usando Write-Host cmdlet preservando al mismo tiempo la compatibilidad con versiones anteriores.

Usando el cmdlet Start-Sleep

Utilice el cmdlet Start-Sleep con el parámetro -Seconds para esperar el período de tiempo determinado antes de continuar ejecutando los siguientes comandos en PowerShell.

Utilice el cmdlet Iniciar-Suspender:

Start-Sleep -Seconds 10; Write-Host "10 seconds have been passed."

PRODUCCIÓN :

Como puede ver en el resultado anterior, tenemos que esperar 10 segundos para finalizar antes de ejecutar el cmdlet Write-Host. Hemos cubierto Write-Host en la sección anterior; continuemos con el cmdlet Start-Sleep. Este cmdlet se usó para suspender la sesión o actividad durante el tiempo determinado. Podemos usarlo según nuestras necesidades, por ejemplo, puede usarse para esperar a que finalice una operación en particular o antes de repetir la operación.

El -Seconds se usó para especificar cuánto tiempo tiene que dormir un recurso en particular (en segundos). Podemos omitir el nombre de este parámetro o hacerlo más corto y usar -s. Tenga en cuenta que podemos especificar valores fraccionarios usando PowerShell versión 6.2.0 o superior.

Usando el cmdlet Wait-Job

Para esperar a que finalice el trabajo en segundo plano:

  • Utilice Start-Job para crear y ejecutar un trabajo en segundo plano.
  • Utilice el cmdlet Wait-Job para esperar a que se complete un trabajo en segundo plano.
  • Una vez que se complete el trabajo en segundo plano, use Write-Host para imprimir un mensaje personalizado en la consola.

Utilice el cmdlet Wait-Job:

$startJob = Start-Job -ScriptBlock{
    $i = 0
    while($i -lt 10){
        $i++
        Sleep 3
    }
}
Wait-Job $startJob.Name
Write-Output "This particular command is executed after completing the job."

PRODUCCIÓN :

En el script anterior, utilizamos Start-Job para crear y ejecutar un trabajo en segundo plano. Esto planteó dos puntos: primero, ¿qué es un trabajo en segundo plano y segundo, qué comandos se incluyen para realizar este trabajo? Un trabajo en segundo plano significa un comando o conjunto de comandos que se ejecutan en un proceso separado en nuestra máquina local. El bloque de script representado con llaves ({}) contiene todos los comandos que se ejecutarán como parte de este trabajo en segundo plano.

En nuestro caso, utilizamos un bucle while que comienza a iterar desde 0 (incluido) hasta 10 (excluido). Para repetir, configuramos una variable de contador llamada $i en 0 y la incrementamos en 1 en cada iteración. Tenga en cuenta que esperamos 3 segundos antes de pasar a la siguiente iteración.

A continuación, utilizamos el cmdlet Wait-Job para esperar a que finalice el trabajo en segundo plano. Aquí, $startJob.Name contenía el nombre del trabajo en segundo plano creado por el cmdlet Start-Job; Luego, este nombre se pasó (como argumento) al cmdlet Wait-Job para esperar a que se complete este trabajo.

Finalmente, utilizamos el cmdlet Write-Output para imprimir un mensaje de cadena en la consola y demostrar que este comando solo se ejecutará después de completar el trabajo en segundo plano. Consulte el resultado anterior para una mejor comprensión.

Usando el cmdlet Wait-Process

Utilice el cmdlet Wait-Process para esperar a que finalice el comando en PowerShell.

Utilice el cmdlet de proceso de espera:

Notepad.exe | Wait-Process

PRODUCCIÓN :

Aquí, utilizamos el cmdlet Wait-Process para esperar a que finalicen el proceso o los procesos. En el ejemplo anterior, espera a que se cierre el NotePad antes de aceptar más entradas o pasar al siguiente comando en la canalización. Este cmdlet suprime el símbolo del sistema hasta que finaliza o se detiene el proceso. También podemos mencionar el proceso usando el ID del proceso (también conocido como PID), el nombre del proceso o canalizándolo al cmdlet Wait-Process. Tenga en cuenta que podemos usar este cmdlet para procesos que se ejecutan localmente en nuestra máquina.

El cmdlet Wait-Process no funcionará en macOS y Linux.

Usando la clase Diagnostics.Process

Utilice la clase Diagnostics.Process para esperar a que finalice el comando/proceso en PowerShell.

Utilice la clase Diagnostics.Process:

[Diagnostics.Process]::Start('notepad.exe').WaitForExit()

PRODUCCIÓN :

El funcionamiento de la clase Diagnostics.Process es el mismo que el cmdlet Wait-Process que aprendimos en la sección anterior. Podemos preferirlo si tenemos una biblioteca .NET instalada en nuestra máquina. Sin embargo, no se recomienda luchar con una solución desafiante cuando ya tenemos comandos de PowerShell simples y fáciles. Con respecto a la solución anterior, el método Start() inició el proceso dado que pasamos como argumento mientras WaitForExit()esperaba a que finalizara este proceso.

Uso del cmdlet Out-Null

Utilice el cmdlet Out-Null para esperar a que finalice el comando/proceso en PowerShell.

Utilice el cmdlet nulo:

Notepad.exe | Out-Null

PRODUCCIÓN :

Usar Out-Null es otra solución para esperar a que finalice/salga el proceso especificado. Cortar con el cmdlet Out-Null significa que estamos activando Windows PowerShell para ejecutar el proceso subyacente sobre una aplicación en ejecución. Este cmdlet no muestra nada, pero espera a que se complete el comando/proceso. Recuerde, Out-Null esperará a que se ejecute todo el comando.

Artículos relacionados