Frage

Stellen Sie sich eine DOS-Stil .cmd-Datei, die zum starten voneinander abhängig Fenstermodus Anwendungen in der richtigen Reihenfolge.

Beispiel:
1) Starten Sie die server-Anwendung durch Aufruf der exe mit Parametern.
2) Warten, bis der server initialisiert werden (oder einen festen Betrag der Zeit).
3) Starten Sie die client-Anwendung ruft eine exe mit Parameter.

Was ist der einfachste Weg, um diese Art von batch-job in PowerShell?

War es hilfreich?

Lösung

Denken Sie daran, dass PowerShell zugreifen können .Net-Objekte.Die Start-Sleep-so der Vorschlag Blair Conrad kann ersetzt werden durch einen Aufruf von WaitForInputIdle der server-Prozess, so Sie wissen, wenn der server bereit ist, vor dem starten des client.

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

Sie könnten auch verwenden Prozess.Start um den Prozess zu starten und haben es Rückkehr der genaue Prozess.Dann brauchen Sie nicht, den get-process.

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

Andere Tipps

@Lars Truijens schlug

Denken Sie daran, dass PowerShell zugreifen können .Net-Objekte.Die Start-Sleep als vorgeschlagen von Blair Conrad kann ersetzt durch einen Aufruf WaitForInputIdle der server-Prozess, so Sie wissen, wenn der server ist fertig, bevor der client.

Dies ist eleganter als Schlafgelegenheit für eine Feste (oder geliefert werden per parameter) Höhe der Zeit.Jedoch, WaitForInputIdle

gilt nur für Prozesse mit Benutzer Schnittstelle und damit über eine Nachricht Schleife.

damit dies funktioniert möglicherweise nicht, abhängig von den Eigenschaften des Start-server-Anwendung.Jedoch, als Lars mich darauf hingewiesen, die Frage bezog sich auf eine Fenster Anwendung (die ich vermisste, wenn ich die Frage), so dass seine Lösung ist wahrscheinlich am besten.

Warten Sie 10 Sekunden zwischen dem Start der Anwendungen, versuchen Sie

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

Wenn Sie möchten, um ein Skript zu erstellen und die Argumente übergeben, erstellen Sie eine Datei namens runlinkedapps.ps1 (oder was auch immer) mit diesen Inhalten:

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

Oder aber Sie verteilen die server-und client-Parameter auf der Linie, die Sie verwenden, um runlinkedapps.ps1.Wenn Sie wollen, Sie könnte sogar gehen in die Verzögerung hier wird, statt der hardcoding 10.

Denken Sie daran, Ihre .die ps1-Datei müssen Sie auf Ihrem Weg, oder müssen Sie Ihren Standort angeben, wenn Sie es ausführen.(Oh, und ich bin davon ausgegangen, dass Start-server-Anwendung, und starten-client-Anwendung werden Sie auf Ihrem Weg - wenn nicht, müssen Sie geben Sie den vollständigen Pfad, um Sie als gut.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top