サーチ…


前書き

PowerShell Workflowは、PowerShellバージョン3.0から導入された機能です。ワークフロー定義はPowerShell関数定義とよく似ていますが、PowerShellエンジンではなくWindows Workflow Foundation環境内で実行されます。

ワークフローエンジンには、いくつかのユニークな「out of box」機能が含まれています。特にジョブの永続性があります。

備考

PowerShell Workflow機能は、PowerShell Desktop EditionのMicrosoft Windowsプラットフォームでのみサポートされています。 Linux、Mac、およびWindowsでサポートされているPowerShell Core Editionは、PowerShell Workflow機能をサポートしていません。

PowerShell Workflowをオーサリングする場合は、ワークフローがコマンドレットではなくアクティビティを呼び出すことに注意してください。 PowerShellワークフローからコマンドレットを呼び出すことはできますが、ワークフローエンジンはInlineScriptアクティビティでコマンドレットの呼び出しを暗黙的にラップします。 PowerShellコードを実行するInlineScriptアクティビティ内でコードを明示的にInlineScriptこともできます。デフォルトでは、 InlineScriptアクティビティは別のプロセスで実行され、呼び出し元のワークフローに結果が返されます。

単純なワークフローの例

workflow DoSomeWork {
  Get-Process -Name notepad | Stop-Process 
}

これはPowerShell Workflow定義の基本的な例です。

入力パラメータを使用したワークフロー

PowerShell関数と同様に、ワークフローは入力パラメータを受け入れることができます。入力パラメーターは、オプションで文字列、整数などの特定のデータ型にバインドすることができます。標準パラメーターparam使用して、ワークフロー宣言の直後に入力パラメーターのブロックを定義します。

workflow DoSomeWork {
  param (
    [string[]] $ComputerName
  )
  Get-Process -ComputerName $ComputerName
}

DoSomeWork -ComputerName server01, server02, server03

バックグラウンドジョブとしてワークフローを実行する

PowerShellワークフローには、本質的にバックグラウンドジョブとして実行する機能が備わっています。ワークフローをPowerShellのバックグラウンドジョブとして呼び出すには、ワークフローを呼び出すときに-AsJobパラメータを使用します。

workflow DoSomeWork {
  Get-Process -ComputerName server01
  Get-Process -ComputerName server02
  Get-Process -ComputerName server03
}

DoSomeWork -AsJob

ワークフローへの並列ブロックの追加

workflow DoSomeWork {
  parallel {
    Get-Process -ComputerName server01
    Get-Process -ComputerName server02
    Get-Process -ComputerName server03
  }
}

PowerShell Workflowのユニークな機能の1つは、アクティビティのブロックを並行して定義する機能です。この機能を使用するには、ワークフロー内でparallelキーワードを使用します。

ワークフローアクティビティを並行して呼び出すと、ワークフローのパフォーマンスが向上する場合があります。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow