実行ポリシーの抜け道?

先日、Windows PowerShell のことを取り上げた。

WSHよりはPowerShell

PowerShellでは他のソースコードを読み込むためには実行ポリシーの設定を行う必要がある。

一度設定すればOKなんだけどbね。


そんなわけで実行ポリシーを設定するのバッチファイルを作ろうかと思ったら、

もっとよい方法があることがわかった。

どうもPowerShellの起動時のパラメータで一時的に実行ポリシーの変更ができるようだ。

さらに起動時に所望のコマンドを実行することが出来るので、

powershell -ExecutionPolicy RemoteSigned -NoExit -Command . .\foolib.ps1

と書いたバッチファイルを用意しておいて、それを開くだけで、

外部ファイルの読み込みを許可し、foolib.ps1の関数を読み込んだPowerShellコンソールが表示される。


この場合、一時的なポリシー変更なので、特に確認画面も表示されない。

こうして開いたPowerShellのコンソールが標準と異なる設定がされていることは全く気づかない。

実行ポリシーをRemoteSigned、ローカルファイルか署名されたリモートファイルを許可する程度であれば、

あまり危ないという印象は受けないし、むしろそれが標準設定でいいのでは? という内容だが、

何の制限もしない ByPass に設定するとしても、特に何も確認されないのだから驚きだ。

恒常的に変更する場合は仰々しい確認画面が出るのに。


意図を知って使う分には問題ないんですけどね。

今回の場合、デバッグコマンドを構築したライブラリを読み込んで、ローカルにある各種スクリプトを実行可にするという目的は明確なので。

そもそも信用できないバッチファイルは実行しちゃいけないですから。

ダウンロードしてきたバッチファイルは実行時に確認される仕組みになってるわけだし。

だから特別に危険ではないってことなんでしょうけどね。

じゃあ、なんでそもそもPowerShellの実行ポリシーの初期値が Restricted(一切の外部ファイル実行禁止)なんだよって話だけど。


実行ポリシーの問題がなければ全部PowerShellスクリプトだけでよかったのかもしれないけど、

実行ポリシーの問題を解決して、ファイルを読み込むためにバッチファイルを1つ用意する必要があるのはちょっと中途半端。

それでも、WSHのJScriptで作ってたときよりはスマートになったからいいか。