経緯
PowerShell でちょっとした処理のスニペットを作り始めた当初、実行ポリシーを回避するために PowerShell を直接叩くのではなく bat ファイルからキックするという方法を採っていました。
batファイル
cd /d %~dp0
PowerShell -ExecutionPolicy RemoteSigned .\throw-the-kitchensink.ps1
例えば batファイル と同じ階層にある throw-the-kitchensink.ps1
を実行するならばこのような感じ。
しかし、ここ最近この方法でもエラーで引っかかる現象に何度か遭遇するようになりました。
対処
対処として実行ポリシーを RemoteSigned
から Bypass
に変更しました。
cd /d %~dp0
PowerShell -ExecutionPolicy RemoteSigned .\throw-the-kitchensink.ps1
違いとしては RemoteSigned
はローカルん保存されているスクリプトは実行可能、ただしネット上からダウンロードしたスクリプトは実行NG、とのこと。
……何となく引っかかっている場合は共有フォルダやUSB経由のような外部(ローカルから見て)持ち込みなケースかもしれません。
あまり遭遇した回数が多くないので詰めた検証ができていないので確証が得られず。ただし、 Bypass
ならばオールオッケー (セキュリティ的には無論宜しくない) なのでとりあえずこれで回避しました。
余談
サンプルスニペットとして throw-the-kitchensink.ps1
という名前を使いました。
この “Throw the kitchen sink” は「ありとあらゆることを全部やる」という意味合いだそうです。
※元々 “Throw everything but the kitchen sink” が「(しっかり備え付けられていて簡単に取り外せない)流し台以外は全部投げる(やる)」ということで「一切合切全部やる」という意味の成句があり、その成句で唯一の例外とされる流し台すら投げる(“Throw the kitchen sink”)、ので本当にありとあらゆることをする、ということの模様。
何が何でも実行する Bypass
の実行ポリシーなので。
それともう一つ、プロレス技でキッチンシンクという膝蹴りの技があるらしいです。プログラムを起動することをよく「キックする」と言うので、蹴り→キッチンシンク→”Throw the kitchen sink”、という連想ゲームの小ネタでした。
参考
- PowerShellの実行ポリシー変更 #Windows – Qiita
- WindowsでPowerShellスクリプトの実行セキュリティポリシーを変更する:Tech TIPS – @IT
- 【PowerShell】Windowsの初期設定を自動化してみる – みログ
- PowerShell 実行時の「デジタル署名されていません」エラーの対処法