PowerShell
PowerShellワークフロー
サーチ…
前書き
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
キーワードを使用します。
ワークフローアクティビティを並行して呼び出すと、ワークフローのパフォーマンスが向上する場合があります。