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コマンドが管理者権限でないと実行出来ない)実行する。