Pregunta

Imagina un DOS de estilo .archivo cmd que se usa para iniciar interdependientes de ventana de las aplicaciones en el orden correcto.

Ejemplo:
1) el Lanzamiento de una aplicación de servidor llamando a un archivo exe con parámetros.
2) Espere a que el servidor inicie (o una cantidad fija de tiempo).
3) Lanzamiento de la aplicación cliente llamando a un archivo exe con parámetros.

¿Cuál es la forma más sencilla de realizar este tipo de trabajo por lotes en PowerShell?

¿Fue útil?

Solución

Recuerde que PowerShell puede tener acceso .Neto de los objetos.El Inicio del Sueño como sugiere Blair Conrad puede ser reemplazado por una llamada a El método waitforinputidle de proceso del servidor para saber cuando el servidor está listo antes de iniciar el cliente.

$sp = get-process server-application
$sp.WaitForInputIdle()

Usted también podría usar Proceso.Inicio para iniciar el proceso y que se devuelva el Proceso exacto.Entonces usted no necesita el proceso.

$sp = [diagnostics.process]::start("server-application", "params")
$sp.WaitForInputIdle()
$cp = [diagnostics.process]::start("client-application", "params")

Otros consejos

@Lars Truijens sugerido

Recuerde que PowerShell puede tener acceso a .Neto de los objetos.El Inicio del Sueño como sugerido por Blair Conrad puede ser reemplazado por una llamada a método waitforinputidle de proceso del servidor para que usted sepa cuando el servidor está listo antes de empezar el cliente.

Esto es más elegante que dormir para un fijo (o facilitadas a través de parámetro) cantidad de tiempo.Sin embargo, El método waitforinputidle

sólo se aplica a los procesos de un usuario la interfaz y, por lo tanto, un mensaje de loop.

así que esto no puede funcionar, dependiendo de las características de lanzamiento del servidor de la aplicación.Sin embargo, como Lars me señaló, la pregunta se refiere a un ventana aplicación (que me perdí cuando leí la pregunta), por lo que su solución es probablemente el mejor.

Esperar 10 segundos entre el lanzamiento de las aplicaciones, intente

launch-server-application serverparam1 serverparam2 ...
Start-Sleep -s 10
launch-client-application clientparam1 clientparam2 clientparam3 ...

Si desea crear una secuencia de comandos y tener los argumentos pasados en, crear un archivo llamado runlinkedapps.ps1 (o lo que sea) con estos contenidos:

launch-server-application $args[0] $args[1]
Start-Sleep -s 10
launch-client-application $args[2] $args[3] $args[4]

O sin embargo usted decide distribuir el servidor y el cliente los parámetros en la línea que se utiliza para ejecutar runlinkedapps.ps1.Si usted desea, usted puede incluso pasar en la demora aquí, en lugar de escribir 10.

Recuerde, su .archivo ps1 necesidad de estar en su Camino, o tendrás que especificar su ubicación cuando se ejecuta.(Ah, y he asumido que el lanzamiento del servidor de la aplicación y ejecución de cliente-aplicación está en su Camino - si no, tendrás que especificar la ruta de acceso completa a ellos también.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top