none
Batch aus Powershell aufrufen (+ ein paar Anforderungen) RRS feed

  • Frage

  • Hallo zusammen,

    ich schreibe gerade ein Computer-Startup Script von Batch auf Powershell um.
    Im neuen Powershell mache ich zuerst vielerlei Dinge. Gegen Ende des Scripts rufe ich 3 Batch-Scripte auf.

    In etwa so sieht das momentan so aus:

    Powershell-Commands
    Powershell-Commands
    Powershell-Commands
    Powershell-Commands
    Powershell-Commands
    Powershell-Commands
    
    Start-Process BatchScript1.cmd -Wait -NoNewWindow
    
    Start-Process BatchScript2.cmd -Wait -NoNewWindow
    
    Start-Process BatchScript3.cmd -Wait -NoNewWindow
    
    Powershell-EndCommand
    
    

    Ich habe folgende Anforderungen:

    - BatchScript2.cmd darf erst aufgerufen werden, wenn BatchScript1 fertig ist. BatchScript3.cmd darf erst aufgerufen werden, wenn BatchScript2 fertig ist.

    - Das Powershell-EndCommand darf erst ausgeführt werden, wenn alle 3 Batch-Scripte durchgelaufen sind.

    - Ich möchte zusätzlich eine maximale Runtime bei den Batch-Scripten haben. Damit meine ich, dass wenn BatchScript3.cmd länger als 10 Minuten läuft, dann soll dieses abgebrochen werden, damit das Powershell-Script weiterlaufen und beendet werden kann.

    Könnt ihr mir da bitte Vorschläge geben, wie man das am besten macht.

    Vielen Dank im Voraus

    Montag, 14. September 2015 07:08

Antworten

  • Hallo Wolf18,

    das kannst du ganz gut mit Jobs durchführen.

    s. hier Jobs

    Dieses kannst du kombinieren mit Wait-Job 

    $j = Start-Job -ScriptBlock {Start-Process BatchScript1.cmd -Wait -NoNewWindow} $j | Wait-Job -Timeout 600



    Best regards,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - Munich

    Blog    

    Caution: This post was written with the intention to help and may contain errors.
    If my post was helpful or answered your question please mark it respectively. Thanks.

    • Als Antwort markiert Wolf18 Montag, 14. September 2015 13:40
    Montag, 14. September 2015 09:42
  • Hallo Wolf18,

    im Endeffekt beantwortest du dir die Fragen fast alle selbst.

    Hier meine 2 Pfennig zum Thema Prozess nach Timeout beenden.

    $p = Start-Process "cmd.exe" '/c ant execute' -PassThru -RedirectStandardOutput $log_file_path
    Wait-Process -id $p.ID -timeout 100
    if(!$p.hasExited) {
    	$p.kill
    }

    Gruß Alex

    • Als Antwort markiert Wolf18 Montag, 14. September 2015 13:40
    Montag, 14. September 2015 11:46

Alle Antworten

  • Hallo Wolf18,

    das kannst du ganz gut mit Jobs durchführen.

    s. hier Jobs

    Dieses kannst du kombinieren mit Wait-Job 

    $j = Start-Job -ScriptBlock {Start-Process BatchScript1.cmd -Wait -NoNewWindow} $j | Wait-Job -Timeout 600



    Best regards,

    David das Neves

    Technology Specialist - Consulting Services
    Computacenter AG & Co. oHG - Munich

    Blog    

    Caution: This post was written with the intention to help and may contain errors.
    If my post was helpful or answered your question please mark it respectively. Thanks.

    • Als Antwort markiert Wolf18 Montag, 14. September 2015 13:40
    Montag, 14. September 2015 09:42
  • Hallo,

    mal bei Start-Process den Parameter -wait anschauen.

    Beste Gruesse
    brima

    Montag, 14. September 2015 11:20
  • Hallo Wolf18,

    im Endeffekt beantwortest du dir die Fragen fast alle selbst.

    Hier meine 2 Pfennig zum Thema Prozess nach Timeout beenden.

    $p = Start-Process "cmd.exe" '/c ant execute' -PassThru -RedirectStandardOutput $log_file_path
    Wait-Process -id $p.ID -timeout 100
    if(!$p.hasExited) {
    	$p.kill
    }

    Gruß Alex

    • Als Antwort markiert Wolf18 Montag, 14. September 2015 13:40
    Montag, 14. September 2015 11:46
  • Danke, das mal mit Powershell-Jobs zu probieren hatte ich schon im Auge. Hatte ich vorher noch nie verwendet.

    Werde es mal testen.

    Schöne Grüße

    Montag, 14. September 2015 13:39