powershellのスクリプトを自動実行するにあたって、実行権限(ExecutionPolicy)を適宜変更するbat

序文

powershellスクリプトを書いて実行しようとすると最初につまずくのが、実行権限のこと。

PS C:\> .\test.ps1
.\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\test.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(http://go.micro
soft.com/fwlink/?LinkID=135170) を参照してください。

どうするかっていうと以下の通り。
PowerShellスクリプトの実行セキュリティ・ポリシーを変更する − @IT
上記リンクみたいに実行権限を変更すれば、書いたpowershellスクリプトを実行出来るようになるわけだが、勝手に権限を変えて実行出来て欲しいときもある。例えば、よく作り変わるサーバー上で実行して欲しいとか、複数台のサーバに置くとか、手動オペレーションが入ると自動化の妨げになる場合。そんな時の話。

batと組み合わせる

powershellスクリプトの中に書いてもpowershellスクリプトが実行出来ないんだからダメなんで、権限の変更はbatにやってもらう。

set TARGETEXECUTIONPOLICY=RemoteSigned
set TARGETSCRIPT=%CD%\test.ps1

REM get origin execution policy
for /f "delims=" %%a in ('powershell -Command Get-ExecutionPolicy') do @set ORIGINEXECUTIONPOLICY=%%a
powershell -Command Get-ExecutionPolicy

REM set target execution policy
powershell -Command Set-ExecutionPolicy %TARGETEXECUTIONPOLICY%
powershell -Command Get-ExecutionPolicy

REM execute powershell script
powershell -File %TARGETSCRIPT%

REM set origin execution policy
powershell -Command Set-ExecutionPolicy %ORIGINEXECUTIONPOLICY%
powershell -Command Get-ExecutionPolicy

現在の実行権限を取得して取っておいて、powershellスクリプトが実行出来る権限に変更、powershellスクリプトを実行して、権限を元に戻す。このbatを管理者権限で(重要・Set-ExecutionPlicyコマンドが管理者権限でないと実行出来ない)実行する。