PowerShell関係のメモ
最近ちょっとPowerShellが楽しくて仕方ない。
ので、いつもの備忘録メモ。
自前のdllを使う
少し凝った事をやりたい場合にC#でdll作ったり、 或いは自作したC#のプログラムをPowerShellで定期処理組みたくなったりする。
そんな場合に PowerShell -> dll(C#)
をやりたくなる。
http://blog.powershell-from.jp/?p=248
https://www.itlab51.com/?p=5998
Add-Type -path
方式と、Reflection.Assembly::LoadAssembly
方式とあるけど、どっちがいいのかな?
と思ったらドンピシャな情報があったのでこちら。
http://tech.guitarrapc.com/entry/2014/03/17/042253
やりたい場合の多くは「自作のdll呼び出し」だから、その範囲内に限って言えばまぁどっちでも良い。
そうじゃなく複数バージョンインストールしてるサードパーティ的な奴を使いたくなったらこの話を思い出す、でとりあえずOKくさい。
おまじない
同一フォルダに
- hogehoge.bat
- hogehoge.ps1
こいつらが並んでるとして。
@echo off setlocal cd %~dp0 powershell -ExecutionPolicy RemoteSigned -File ./hogehoge.ps1
point:
- powershellコマンドの
-File
でps1を指定して実行する。
.ps1
自体はダブルクリックしても起動できない(実行可能ではない)ので、
powershellコマンド
の -Fileオプション
として実行する。
.jar
自体は(普通だと)そのまま実行できないので java -jar
で実行するのと似たようなもの。
(マニフェストを仕込んでおけばjarダブルクリックで実行できるんだって!!)
ちなみに jar
に関しては launch4j
使って exe
化するのがオススメ。
ということで .ps1
とセットでキックするためだけの .bat
を用意して使う。
- 実行前に
cd %~dp0
を打っておく。
.ps1
はカレントフォルダが解らない子なのだそうで、これが原因でハマってた人がいた。(うっかりURLを控え忘れた)
なので、キックする .bat
の方で cd
掛けておく事にした。
割とここまで定型パターンらしい。