2015年8月26日水曜日

[C# / PowerShell] C#からPowerShellを実行する方法

PowerShellを動的かつ並列実行したかったので、C#で書いてみました。

  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でクルクル回す、と。
例外処理は記載してませんが。。

2015年8月13日木曜日

[Oracle] 正規表現で数値形式以外を取得するSQL

ずいぶん久方ぶりな書込みとなります。。

Oracleの文字列フィールドに数値形式以外のデータがあったら
見たい、という要望があったので正規表現での検索を覚書。

SELECT * FROM table_name
WHERE NOT REGEXP_LIKE(column_name, '^[-+]?([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][-+]?[0-9]+)?$')


REGEXP_XXXはOracle10g以降でしたかね。