2016-08-11 8 views
0

PowerShellで同時に複数のタスクを同期しようとしているのは、それぞれ2〜4時間かかるためです。私は今、それぞれのタスクを次々と処理しています。 PowerShellにというバックグラウンドジョブというオプションがあることは知っています。同時に複数の.cmdファイルを処理するように、次のコードを変換する方法はありますか?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

あなたはスタート・ジョブを使用することができます。

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

この時点で、あなたはあなたが始めたジョブの状態を監視するためにいくつかのコードを追加する必要があると思われます。潜在的に$ job.Stateを定期的に調べることができます。

これを拡張すると、同じタイプのジョブが既に実行されている場合は、そのジョブの開始を拒否することができます。

あなたが見てみる必要があり、仕事を開始することに加え

  • は、Get-仕事を - 任意のジョブ(実行中またはそれ以外)を取得するには
  • は、ジョブを受信 - バック
  • を結果を得るにはRemove-Job - ジョブが終了したら削除します。
  • Stop-Job - 停止する必要がある場合にジョブを停止します。
+0

ありがとうございます。ジョブが完了したかどうかを確認する方法はありますか? sample.cmdを起動したときと同様に、プロセスは約3時間続き、Oracleデータベースにファイルが挿入されます。私は仕事が終わるたびに、ユーザーにメッセージをプリントアウトしたいと思います。 –

+0

あなたは$ job.Stateを検査します。実行中、完了済み、失敗したことなどです。 –

関連する問題