qshinoの日記

Powershell関係と徒然なこと

非同期実行 by powershell

非同期実行 by powershell

  1. RunSpace
  2. Start-Job
  3. Start-Process
  4. AppDomain
  5. 独立アプリ起動
  6. System.Diagnostics.Process

非同期中、標準入出力を制御できるもの。

  • Start-Job : receive-job
  • Start-Process: ファイル指定
  • Process: Stream

終了値を取得できるもの

  • RunSpace
  • Start-Process
  • Process

面倒ではあるが、Start-Processか、Processクラスを使用するのが最も柔軟性が高い。

簡単さを追い求めるなら、Start-jobが楽ではあるが、それでもRemove-Jobなどの後処理が必要。

最初は面倒ではあるが、ライブラリを作ってProcessクラスを使用するのも一つの手。

但し、今の所、非同期プロセスの標準出力を受け取り、WPFの様な別スレッドで使う方法が確立できておらず、もう少し調査が必要。

ProcessのDataReceivedEvent からのWPF/UIスレッドのDispatcher.BeginInvoke(Action)をPowerShellで試行した限りでは、Delegate=Actionの型が合わずにエラーとなり、未だ成功していない。手持ちの対策候補はスクリプトブロックを[action]型にキャストする程度であり、時間ができたら試行する予定。