Fukuoka.exの技術コミュニティで、アドバイザーズを担当してるtwibeeことenpedasiといいます。よろしくお願い致します。
はじめに
Elixirの「System.cmd」関数を使えば、外部コマンドであるOSのコマンドを実行することができます。それは、Windows環境下にあっても同じです
大人の事情でPowerShellコマンドを実行しないといけない場合は
どのようにすれば良いのでしょうか?
Powershellも起動できる
いきなり結論ですが、シェルコマンドとしてPowershellを実行します。
System.cmd "Powershell", ["pscript.ps1"]
作業フォルダ
作業フォルダには注意が必要です。
プロジェクトフォルダの直下にps1というフォルダを作成し、Powershellのps1
を置いてpowershellスクリプトを実行する例は、このようになります。
System.cmd "Powershell", ["ps1/pscript.ps1"]
Powershellのスクリプトで、以下のようなコードを書いた場合はどうなるでしょうか?
copy-item a.csv b.csv
これは、ps1フォルダの中が対象でなく、プロジェクトフォルダのa.csvを同フォルダのb.csvにコピーする挙動となります。
あくまで、作業フォルダの対象はプロジェクトフォルダということになります。
おわりに
ElixirとPowerShell。相当異色な組み合わせですが、PowerShellのパイプラインはElixirと本質的に近いものがあり、意外と悪くはないと思います(個人の感想です)。
スケジューラである elixir-quantum を使えば、Windowsのタスクスケジューラと併用して、スケジューラを起動することも可能です。(fukuoka.exでのquantumの紹介事例はこちら)
大人の事情で仕方がない場合も、華麗にソリューションしてしまいましょう!