以前Powershellのps1ファイルをダブルクリックで実行する方法についてエントリを書きました。
今回も似たような内容なのですが、今回は”Powershellを日常的に実行しない方にダブルクリックで実行してもらう”場合の話です。
相手がPCにあまり詳しくない方だった場合などにスクリプトが書かれたファイルを渡して、「とりあえずこのファイルを実行してもらえれば○○ができるようになるから」という運用ができると便利です。
ところが、Powershellスクリプトの実行はWindowsのデフォルトで制限されているので、実行してもらう前にPowershellの実行ポリシー(Executionpolicy)を緩める必要があります。
この実行ポリシー変更も含めてダブルクリックで行う際に、バッチファイルからps1ファイルを実行するようにするとうまく行くそうです。
コード
【bat】
@echo off
powershell -NoProfile -ExecutionPolicy RemoteSigned .\hoge.ps1
上記のバッチファイルを作成し、実行してもらいたいPowershellスクリプト(hoge.ps1)と同じフォルダに配置します。あとはバッチファイル側を実行してもらえれば連動してPowershellスクリプトが動くという寸法です。
ファイルが2つになってしまうのが少々難ですが、運用はやりやすいのではないかと思います。
パラメータについて
Powershellの実行コマンドのパラメータとして-NoProfileと-ExecutionPolicyという2つがありますが、まず-NoProfileはPowershell実行時に読み込む環境情報を読み込まないという設定です。今回想定している利用場面では無くても大丈夫そうなパラメータですが、念のための記述という感じです。
-ExecutionPolicyは実行ポリシーを設定するためのパラメータです。これを設定しているのがバッチファイルからの起動のポイントになります。
緩めた実行ポリシーはどうなるのか
必要に迫られているとは言え、今回はデフォルトからPowershellの実行ポリシーを緩和しています。これはスクリプト実行後どうなるのでしょうか。
今回のようにpowershell.exeの起動オプションとしてExecutionPolicyを指定した場合、設定した実行ポリシーは当該プロセス実行時しか有効にならないようです。つまり、スクリプト実行後設定が元に戻ります。特に必要ないのであればデフォルトの実行ポリシーにしておいた方がいいと思うので、この点安心です。
参考情報
以下の情報を参考にさせていただきました。ありがとうございました。
バッチファイルから PowerShell を呼び出す方法
PowerShellのExecutionPolicyのスコープとかについて詳しく
[Qiita]
About PowerShell.exe
[docs.microsoft.com]