チェックポイントと並列処理を調べる

完了

ワークフローを使用すると、コード内に複雑なロジックを実装できます。 ワークフローで使用できる 2 つの機能は、チェックポイントと並列処理です。

チェックポイント

チェックポイント は、ワークフローの現在の状態のスナップショットです。

チェックポイントには、変数の現在の値と、その時点まで生成された出力が含まれます。 (チェックポイントの詳細については、チェックポイント Web ページを参照してください)。

ワークフローがエラーで終了した場合、または中断された場合は、次回実行されるときに、ワークフローの先頭ではなく最後のチェックポイントから開始されます。

Checkpoint-Workflow アクティビティを使用して、ワークフロー内のチェックポイントを設定できます。

たとえば、Activity2 の後に例外が発生した場合、ワークフローは次のサンプル コードで終了します。

ワークフローが再実行されると、最後のチェックポイント セットの直後に続く Activity2 で開始されます。

    <Activity1>
        Checkpoint-Workflow
            <Activity2>
                <Exception>
            <Activity3>

並列処理

スクリプト ブロックには、一般的なスクリプトのように、順次ではなく、同時に実行される (または並列 ) 複数のコマンドがあります。

並列処理と呼ばれます。 (並列処理の詳細については、並列処理 Web ページを参照してください。

次の例では、2つのVMであるvm0vm1が同時に起動され、vm2vm0vm1が起動した後にのみ開始されます。

    Parallel
    {
        Start-AzureRmVM -Name $vm0 -ResourceGroupName $rg 
        Start-AzureRmVM -Name $vm1 -ResourceGroupName $rg
    }

    Start-AzureRmVM -Name $vm2 -ResourceGroupName $rg 

もう 1 つの並列処理の例として、いくつかの追加オプションを導入する次のコンストラクトがあります。

  • に対して ForEach -Parallelを実行します。 ForEach -Parallel コンストラクトを使用して、コレクション内の各項目のコマンドを同時に処理できます。 コレクション内の項目は並列処理されますが、スクリプト ブロック内のコマンドは順番に実行されます。

次の例では、Activity1 は、コレクション内のすべての項目に対して同時に開始されます。

項目ごとに、Activity2Activity1 が完了すると開始されます。 Activity3 は、Activity1Activity2 の両方がすべてのアイテムに対して完了した後にのみ開始されます。

  • ThrottleLimit - 並列処理を制限するには、ThrottleLimit パラメーターを使用します。 ThrottleLimit が高すぎると、問題が発生する可能性があります。 ThrottleLimit パラメーターの理想的な値は、いくつかの環境要因によって異なります。 低い ThrottleLimit 値から始めて、特定の状況に適した値が見つかるまで値を増やしてみてください。
ForEach -Parallel -ThrottleLimit 10 ($<item> in $<collection>)
{
    <Activity1>
    <Activity2>
}
<Activity3>

実際の例は、次のコードのようになります。コピー後に各ファイルのメッセージが表示されます。 すべてのファイルがコピーされた後でのみ、完了メッセージが表示されます。

    Workflow Copy-Files
    {
        $files = @("C:\LocalPath\File1.txt","C:\LocalPath\File2.txt","C:\LocalPath\File3.txt")
   
        ForEach -Parallel -ThrottleLimit 10 ($File in $Files)
        {
            Copy-Item -Path $File -Destination \\NetworkPath
            Write-Output "$File copied."
        }
   
        Write-Output "All files copied."
    }