PowerShell后台作业(同时有多个.cmd文件)

时间:2016-08-11 10:43:28

标签: powershell background-process

我正在尝试在PowerShell中同时同步不同的任务,因为它们每个大约需要2-4个小时。我现在拥有的脚本只是一个接一个地处理每个任务。我知道PowerShell中有一个名为后台作业的选项。有没有办法转换以下代码,以便它同时处理多个.cmd文件?

$handler_button1_Click= 
{
$answer= $finalcheck.popup("text",0,"text",4)
If($answer-eq 6) {
   [Windows.Forms.MessageBox]::Show("text", "Information", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)
   $listBox1.Items.Clear();    
    if ($checkBox1.Checked)    { 
    Try{ 
    & K:\sample.cmd
    }catch [System.Exception]{
    $listBox1.Items.Add("Error")}
    }

    if ($checkBox2.Checked)    { 
    Try{ 
    & K:\sample2.cmd
    }catch [System.Exception]{
    $listBox1.Items.Add("Error")}
    }

1 个答案:

答案 0 :(得分:1)

您可以使用Start-Job:

$job = Start-Job { & K:\sample.cmd }

此时您可能需要添加一些代码来观察您已启动的工作状态。您可以定期检查$ job.State。

对此进行扩展,如果一个作业已在运行,您可能会拒绝启动相同类型的作业。

除了Start-Job,您还应该看看:

  • Get-Job - 获得任何工作(跑步或其他)
  • 接收工作 - 取回结果
  • 删除作业 - 完成作业后删除作业。
  • 停止工作 - 如果你需要杀死它就停止工作。