- Powershellをお使いの貴兄は、set-executionpolicy RemoteSigned していると思います。
- 諸事情あって非プログラマーなどPowershellを知らぬい人々のPC上でPowershellスクリプトを動かしたい時に、わざわざそのPCで set-exectuionpolicy RemoteSigned とか打ち込んでEnterキー連打するのはちょっと煩わしいなぁ、という時にどうするのかを考えた結果、「バッチファイルで呼び出せばいいんじゃね?」となりました。
sample.bat
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy remotesigned -File ./XXXXXXXX.ps1
- バッチファイルにこういう風に書くだけでOK。ファイルは一つ増えてしまいますが、細かい設定をする必要も無く、後始末も簡単です。ファイル消すだけですしね。
引数の罠
- 呼び出し先のスクリプトに引数として良くあるオプションを渡す場合、--version などのような -- や - を接頭に置いたものを処理しようとすると、引数として正常に動作しないことに7年経った2022年に気付きました。
test.ps1
param( $arg1 )
write-host $arg1
このような単純に引数を表示するスクリプトを用意します。
powershell.exe
./test.ps1 --version
--version
powershell.exeで直接呼び出して上げれば、正しく動作します。
しかし、バッチファイル内で引数も記述して……
test.bat
%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -executionpolicy remotesigned -File ./test.ps1 %1
cmd.exeでそのバッチファイルを実行すると引数が無かったことに。
cmd.exe
.\test.bat --version
# 何も表示されない
- -- だろうが - だろうが、powershell側に渡された時点で失われてしまうため、もしこのような運用をするのであれば、MS-DOS時代には良くあった / を使えば何とかなります。
cmd.exe
.\test.bat /version
/version
# 引数を表示してくれた
- 付けてはいけない記号については、- のみ調査済です。/ と \ は付けても問題ありませんでした。
- 現場からは以上です。