2012年12月6日木曜日

PowerShell Workflow をもうちょっと触ってみる

昨年の PowerShell AdventCalendar 2011 にて PowerShell 3.0 のワークフロー周りを軽く触ってみたことをまとめていましたが、一年たって今度はもう少し触ってみよう!、というちょっとまて貴様的な、記事になりまして、PowerShell Advent Calendar 2012 のエントリとなります。


1.PowerShell ワークフローを Workflow Foundation の xaml に変換

PowerShell のワークフローは、Workflow Foundation 4 をベースとして動作しています。その割に永続化機能が最初から備わっていたりと「実は違うんじゃないのか?」などと疑っていましたが、間違いなく WF4 ベースで動いている証拠ともなります。

   1: workflow Get-SampleInfo
   2: {
   3:     dir
   4: }

たとえば上記のような簡単なものをワークフローとして定義します。

コマンド実行

実行するとこのようにフォルダ一覧が表示されるのが確認できます。
実はこの時点で PowerShell のワークフローは Workflow Foundation の xaml に変換が行われているのです。それを確認するために、コマンド情報から xaml 定義を表示させてみます。

表示させるには次のコマンドを入力します。


   1: Get-Command Get-SampleInfo | foreach XamlDefinition

このコマンドを実行することによって、変換され xaml 形式となった PowerShell Workflow を確認することができます。

xaml取得

最初に定義した PowerShell Workflow がきれいに Workflow Foundation 4 用の xaml として変換されているのが確認できると思います。ちゃんと DIr なんてわざわざ入力した部分も、Get-ChildItem コマンドレットへと変換され、GetChildItem アクティビティへと変わっているのが確認できます。

このように PowerShell で定義した内容が自動で Workflow Foundation 4 に変換されているため、WF4 で作成したワークフローをそのまま PowerShell にて実行できるということになります。

ちょっとした補足としては、変換結果は WF4 のものであり、WF4.5 ではない、というところが注意ですね。試しに変換された xaml をファイル出力して Visual Studio 2010 で開いてみます。

   1: Get-Command Get-SampleInfo | foreach XamlDefinition | Out-File "d:\Get-SampleInfo.xaml"

このような感じで Out-File をパイプラインを通じて利用すればあっさりと xaml が出力されます。それをそのまま Visual Studio 2010 で開くと以下のようになっています。

VSOpen

ワークフローデザイナー下部にパンモードなど、WF4.5 での追加機能が表示されていないことからも、WF4 であることがわかると思いますが、作成した PowerShell ワークフローがそのまま Visual Studio 2010 で開けて編集できてしまうのがわかります。ここで編集した場合は、Import-Module などで取り込みなおせば良いわけですね。


2.PowerShell ワークフローの永続化まわり

うらやましいことに PowerShell ワークフローの永続化は何もしなくとも高性能で、WF4 のそれよりも非常に便利です。WF4 の場合は、SQL Server などの永続化環境を構築し、ホスト側アプリケーションで永続化を行う設定が必要です(といってもごくごくわずかな記述量ですが)。しかし、PowerShell ワークフローでは、デフォルトでこの永続化が有効となっており、ファイルベースで記録されていきます。

この永続化のタイミングですが、次の3通りから指定できます。

  1. 未指定:ワークフロー開始時、終了時、明示的に指定したタイミングで永続化
  2. True:一つのアクティビティ(コマンドレット)が実行終了したタイミングで永続化
  3. False:永続化は行わない

この永続化のタイミング指定は –PSPersist オプションを用いて指定します。例えば True を指定するにはこのように入力します。

   1: Get-SampleInfo -PSPersist $true

なお PowerShell ワークフロー内で、明示的に永続化を行うには Checkpoint-Workflow を記述することで行えます。

今回は WF 使いとして気になっている PowerShell ワークフローについて少しだけ触ってみました。実際利用してみるとわかるのですが、普通に PowerShell を利用している感覚でワークフローが作成でき、永続化機能は非常に便利だし、xaml も作れるしといたれりつくせりです。

また Visual Studio との連携した利用もものすごく簡易です。Visual Studio で PowerShell ワークフローを作成することもできるということですし、デザイナリホスティングなアプリを用意すれば Visual Studio がなくともそれが可能だということです。

コマンドをうたなくとも PowerShell ワークフローが作成できるというのも、なかなか面白いかもしれません。

0 件のコメント:

コメントを投稿