Tengo un script PowerShell 1.0 para abrir un montón de aplicaciones. La primera es una máquina virtual y las otras son aplicaciones de desarrollo. Quiero que la máquina virtual termine de iniciarse antes de que se abra el resto de las aplicaciones.
En bash solo podría decir "cmd1 && cmd2"
Esto es lo que tengo ...
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
fuente

| out-nullhice justo lo que necesitaba. Trató de usarStart-Job, sino porque estoy pasando los resultados de las funciones como parámetros, se puso un poco skitzoid en mí, así que no podía usar la última sugerencia ...-ArgumentList, sepárelos con comas como-ArgumentList /D=test,/S.Además de usar
Start-Process -Wait, canalizar la salida de un ejecutable hará que Powershell espere. Dependiendo de la necesidad, lo haré normalmente tubería aOut-Null,Out-Default,Out-StringoOut-String -Stream. Aquí hay una larga lista de algunas otras opciones de salida.Echo de menos los operadores de estilo CMD / Bash a los que hizo referencia (&, &&, ||). Parece que tenemos que ser más detallados con Powershell .
fuente
Out-Stringcambia la salida a una sola cadena de varias líneas , mientras que PowerShell por defecto devuelve una matriz de líneas .Start-Processdebe evitarse para aplicaciones de consola (a menos que realmente desee ejecutarlas en una nueva ventana ) porque no podrá capturar o redirigir su salida.Simplemente use "Proceso de espera":
el trabajo esta terminado
fuente
Si utiliza
Start-Process <path to exe> -NoNewWindow -WaitTambién puede usar la
-PassThruopción de eco de salida.fuente
-PassThruno emite salida (una aplicación que no es de consola, por definición, no producirá salida de consola), emite unaSystem.Diagnostics.Processinstancia que representa el proceso recién lanzado, por lo que puede examinar sus propiedades y esperar a que salga más tarde.Algunos programas no pueden procesar el flujo de salida muy bien, por lo que el uso de tubería
Out-Nullpuede no bloquearlo.Y
Start-Processnecesita el-ArgumentListcambio para pasar argumentos, no tan conveniente.También hay otro enfoque.
fuente
Incluir la opción
-NoNewWindowme da un error:Start-Process : This command cannot be executed due to the error: Access is denied.La única forma en que pude hacerlo funcionar fue llamando:
fuente
Llevándolo más lejos, incluso podrías analizarlo sobre la marcha
p.ej
fuente
Siempre hay cmd. Puede ser menos molesto si tiene problemas para citar argumentos para iniciar el proceso:
fuente