PowerShell の実行ポリシーについて

経緯

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”、という連想ゲームの小ネタでした。

参考

余談: ファイル名に連番を振ってリネームする

余談2: throw the kitchen sink

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。