none
How to start a proccess and execute a specific command in it? RRS feed

  • Frage

  • I need to start a process (java server) with powershell and then be able to execute a specific command inside the context of the started process/server. For context, if I start the server normaly I then get a console window where I can enter different commands like status, stop etc. But of course they only work inside the server process and not in powershell.

    So how can I start a process with powershell, let it run and access/send commands to that process later?

    Here is what I have tried so far:

    $SERVER_JAR = "myServer.jar"
    $MIN_RAM = "1024M"
    $MAX_RAM = "5G"
    
    $javaArgs = @('-server', "-Xms$($MIN_RAM)", "-Xmx$($MAX_RAM)", "-jar $SERVER_JAR", 'nogui') # some arguments for the java process
    
    Start-Process java -ArgumentList $javaArgs -NoNewWindow -Wait # starting the java server process in the same window/process
    
    if (condition) {
        stop # This specific stop command should be executed inside the java server process, because it does ensure the server is saved etc. before shutdown
    }

    Mittwoch, 10. März 2021 18:51

Antworten

  • Ein Prozess der keine Automatisierung anbietet kann dieser Art nicht gesteuert werden.
    Dafür benötigt man eine offen gelegte Schnittstelle.

    Wenn es sich um ein Dialogprogramm handelt, kannst du das neue und kostenlose "Power automate Destop" von Microsoft verwenden.
    Allerdings haben wir festgestellt, dass man eine Tastenfolge ALT+F4 zum Beenden senden muss, der Click auf den Closebutton funktioniert nicht bei allen Programmen.

    Donnerstag, 11. März 2021 09:22
  • ... den Prozess nicht einfach beenden kann, da sonst nicht alles korrekt gespeichert und heruntergefahren wird ... 

    Ich sehe das wie unser Suchender. Der Hersteller hat offenbar nicht vorgesehen, den Prozess zu automatisieren. Entweder Du wendest Dich an den Hersteller, was die professionellste Alternative wäre, oder Du musst eben frickeln. 

    Eine weitere Möglichkeit zum Frickeln, neben dem neuartigen "Power automate Destop", wären Script-Sprachen, die dafür gemacht wurden, Windows-Programme über ihre grafische Oberfläche zu steuern. Also z.B.  AutoIt oder AutoHotkey. Damit könnte man Text oder Tastenfolgen an andere Fenster oder Dialogboxen oder sowas senden.

     

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 11. März 2021 13:51

Alle Antworten

  • Da wir hier im deutschen Powershell Forum sind, antworte ich mal auf deutsch. Wenn es Dir nur darum geht, den Java-Server-Prozess wieder zu beenden, brauchst Du doch nur das zu tun.

    Wenn Du bei Deinem Start-Process statt des Parameters -Wait ein -PassThru anhängst, bekommst Du das Objekt des gerade gestarteten Prozesses zurück geliefert. Das kannst Du in einer Variablen speichern. Diese kannst Du dann, abhängig von Deiner Bedingungsprüfung an Stop-Process weiterleiten und damit den Prozess beenden.


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Mittwoch, 10. März 2021 22:49
  • Vielen Dank für den Hinweis, das Problem ist, dass ich den Prozess nicht einfach beenden kann, da sonst nicht alles korrekt gespeichert und heruntergefahren wird ^^ Ich muss zwingend dieses "Stop" Command innerhalb des Prozesses ausführen, nur dann wird der Server Ordnungsgemäss gespeichert und heruntergefahren.
    Donnerstag, 11. März 2021 07:09
  • Ein Prozess der keine Automatisierung anbietet kann dieser Art nicht gesteuert werden.
    Dafür benötigt man eine offen gelegte Schnittstelle.

    Wenn es sich um ein Dialogprogramm handelt, kannst du das neue und kostenlose "Power automate Destop" von Microsoft verwenden.
    Allerdings haben wir festgestellt, dass man eine Tastenfolge ALT+F4 zum Beenden senden muss, der Click auf den Closebutton funktioniert nicht bei allen Programmen.

    Donnerstag, 11. März 2021 09:22
  • ... den Prozess nicht einfach beenden kann, da sonst nicht alles korrekt gespeichert und heruntergefahren wird ... 

    Ich sehe das wie unser Suchender. Der Hersteller hat offenbar nicht vorgesehen, den Prozess zu automatisieren. Entweder Du wendest Dich an den Hersteller, was die professionellste Alternative wäre, oder Du musst eben frickeln. 

    Eine weitere Möglichkeit zum Frickeln, neben dem neuartigen "Power automate Destop", wären Script-Sprachen, die dafür gemacht wurden, Windows-Programme über ihre grafische Oberfläche zu steuern. Also z.B.  AutoIt oder AutoHotkey. Damit könnte man Text oder Tastenfolgen an andere Fenster oder Dialogboxen oder sowas senden.

     

    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 11. März 2021 13:51
  • Wie es nun mal Microsofts Art ist: Power Automate Desktop ist für Windows10-User frei. Somit wird sich immer seltener nach Alternativen umgesehen.
    Donnerstag, 11. März 2021 14:09
  • Power Automate Desktop ist für Windows10-User frei.

    Zitat: 

    "Wenn das Produkt kostenlos ist, dann bist "Du selbst" das eigentliche Produkt. Und jetzt frag Dich mal, wer in diesem Konstrukt der Kunde ist und für Dich bezahlt!"


    Live long and prosper!

    (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 11. März 2021 14:52