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-null
hice 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-String
oOut-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-String
cambia la salida a una sola cadena de varias líneas , mientras que PowerShell por defecto devuelve una matriz de líneas .Start-Process
debe 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 -Wait
También puede usar la
-PassThru
opción de eco de salida.fuente
-PassThru
no emite salida (una aplicación que no es de consola, por definición, no producirá salida de consola), emite unaSystem.Diagnostics.Process
instancia 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-Null
puede no bloquearlo.Y
Start-Process
necesita el-ArgumentList
cambio para pasar argumentos, no tan conveniente.También hay otro enfoque.
fuente
Incluir la opción
-NoNewWindow
me 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