代码之家  ›  专栏  ›  技术社区  ›  ttugates

运行Powershell。。shell命令(不是脚本)在新窗口中并行并等待

  •  0
  • ttugates  · 技术社区  · 8 年前

    我正在尝试做以下事情:

    Workflow spawnInParallel() {
      $task1 = { "Dir C:\; pause" }
      $task2 = { "Dir C:\Windows; pause" }
      $task3 = { "ng build --prod; pause" }
    
      $tasks = $task1, $task2, $task3    
      ForEach -Parallel ($task in $tasks) {
        start powershell "& $task"
      }
    }
    
    spawnInParallel
    

    我不知道这是工作流、作业还是其他任务。。希望它保持干净和简单。。使用PS 5.1。

    预期的结果将是原来的,加上3个新的Powershell窗口,运行该命令,而不是立即关闭。

    使用更新的接受答案实施

    Workflow showParallel() {    
        param([String[]] $procs)
    
        $tasks = @()
        foreach ($proc in $procs) {
            $tasks += " cmd.exe /c 'Echo Running $proc&$proc&pause' "
        }
    
        foreach -parallel ($task in $tasks) {
            Start-Process powershell "-c $task"
        }
    }
    
    $app1BuildCmd = "ng build --app app1 --prod --output-path $app1Root"
    $app2BuildCmd = "ng build --app app2 --prod --output-path $app2Root"
    $app3BuildCmd = "ng build --app app3 --prod --output-path $app3Root"
    
    showParallel -procs @($app1BuildCmd , $app2BuildCmd , $app3BuildCmd )
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Kory Gill    8 年前

    将一系列DOS命令串在一起可能很棘手,但可以完成或进一步重构。。。

    这似乎是做你想做的,或者至少可以用来实现你的最终结果。。。

    Workflow showParallel()
    {
        $t1 = {
            cmd /k echo t1 in cmd here...`&pause
        }
        $t2 = {
            cmd /k echo t2 in cmd here...`&pause
        }
        $t3 = {
            cmd /k echo t3 in cmd here...`&pause
        }
    
        $tasks = $t1, $t2, $t3
        foreach -parallel ($task in $tasks)
        {
            Start-Process powershell "-noexit `"$task`""
        }
    }
    
    showParallel
    

    根据OP的请求更新

    Workflow showParallel()
    {
        $name1 = 't1!'
        $run1 = "echo $name1 in cmd here..."
    
        $t1 = "
            cmd.exe /c '$run1&pause'
        "
    
        $t2 = {
            cmd /c echo t2 in cmd C here...`&pause
        }
        $t3 = {
            cmd /k echo t3 in cmd K here...`&pause
        }
    
        $tasks = $t1, $t2, $t3
        foreach -parallel ($task in $tasks)
        {
            $task
            #Start-Process powershell "-noexit -c $task"
            Start-Process powershell "-c $task"
        }
    }
    
    showParallel
    
    推荐文章