private List<string> executePowerShell() { // PowerShellスクリプト string script = @" # C#からの引数の受け取り $count = 0 foreach($arg in $input) { switch ($count) { 0 { $foo = $arg } 1 { $bar = $arg } } $count++ } # 何らかの処理 # C#に返したい変数 $foo $bar "; List<string> fromPowerShell = new List<string>(); using (var invoker = new RunspaceInvoke()) { // PowerShellの実行、第二引数がPowerShellに渡す引数 var psResult = invoker.Invoke(script, new[] { 0, 1 }) // PowerShellから変数の値を受け取る($foo, $bar) foreach (PSObject result in psResult) { if (result != null) { fromPowerShell.Add(result.ToString()); } } } return fromPowerShell; } |
こんな感じのメソッドを用意して、 script を動的生成 & Parallel.Forでクルクル回す、と。
例外処理は記載してませんが。。