BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース PowerShell 3のWindows Workflow Foundationサポート

PowerShell 3のWindows Workflow Foundationサポート

ブックマーク

原文(投稿日:2012/03/26)へのリンク

MicrosoftはWindows PowerShell Workflowの詳細を発表している。PSWFとして知られるPowerShell 3のこの機能を使うと管理者は“複数のコンピュータやデバイスやITプロセスにまたがる長時間実行されるタスクを安全に実行する”ことができる。この場合、“長期間”とは数時間から数日だ。

PSWF用のワークフローはWindows Workflow Foundationで使われるXAMLで書かれる。しかし、ほとんどのPowerShellユーザは新しいスクリプトベースのワークフローの構文を使いやすいと思うだろう。この構文はPowerShellの拡張であり、複数のコンストラクトが追加されている。

  • workflow: ワークフローを定義する。このコンストラクトを使うことであるワークフローを他のワークフローに入れ子にできる。
  • inlinescript: 通常、ワークフローの各行は分離されて実行される。このコンストラクトは複数の行をグループにして、ローカル変数を共有できるようにする。インラインスクリプトブロックを使えば、通常はワークフロー内で使えないPowerShellの構文が使えるようになる。
  • foreach –parallel: 各項目に対して、コンストラクトの内容を並列で実行する。
  • parallel: コンストラクトの内部で各タスクを並列実行する。実行順は保証されない。
  • sequence: コンストラクトの内部で順番にタスクを実行する。通常は並列実行ブロックの中で、順列になった文のグループを作るのに使われる。

重要なのはPowerShellのワークフローは多くの点でPowerShellの構文のサブセットであることだ。通常のPowerShellスクリプトとは違い、PowerShellのワークフローは静的にコンパイルされる。したがって、位置パラメータや動的パラメータなど多くの動的な特性は利用できない。また、ワークフローをどの時点でも永続化できる必要があるので、ドット記法を使ったメソッドの実行もできない。“ドット記法を使えば、生のオブジェクトを扱えますが、ワークフローが、そのオブジェクトが生成される呼び出しからそのオブジェクトのメソッドを利用する呼び出しの間で永続化されている場合は、利用できません。”

ワークフローのアクティビティとして動作しないコマンドレットもある。前述の通り、ワークフローの各行は分離されたPowerShellセッションで実行される。したがって、PowerShellセッションの状態を変えてしまうコマンドレットは使えない。同じようにトランザクションをサポートするコマンドレットも使えない。

PSWFは拡張性を考慮して設計されている。具体的に言えば、スケールアウトできるように設計されている。ひとつのワークフローは“数千の管理ノード”上で実行できる。従って、巨大なサーバ群をひとつのマシンを管理しているかのように簡単に管理できる。例えば、複数のマシンにまたがって実行されるワークフローを起動するためには、PSComputerNameパラメータを付けてワークフローを起動すればいい。このパラメータでマシン名のリストを渡すのだ。

長時間実行されるワークフローはバックグランドで実行するのがいいだろう。PSWFはPowerShellのジョブインフラと統合されている。従って、ワークフローをAsJobパラメータ付きで実行することも、通常のジョブコマンドレットを使うこともできる。

この記事に星をつける

おすすめ度
スタイル

BT