TvRockからコールしているスクリプトを入れ替えようとしていて、従来、.bat で実行していたものを .ps1 に切り替えようとしたところ、スクリプトの実行許可がないというエラーに遭遇。
.ps1 の実行許可はとっくの昔に適用していたのでアレ?っとおもったが、64bit 環境の場合、64bit 版の PowerShell と 32bit 版の PowerShell が別個に存在していて、それぞれに許可を挙げないと駄目っぽいことがわかった。
以下整理。
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.X:\TvRock>powershell -File "スクリプトフォルダ名\スクリプト名.ps1"
スクリプトの実行がシステムで無効になっているため、ファイル スクリプトフォルダ名\スクリプト名.ps1 を読み込めません。
詳細については、「get-help about_signing」と入力してヘルプを参照してください。
+ CategoryInfo : NotSpecified: (:) []、ParentContainsErrorRecordEx
ception
+ FullyQualifiedErrorId : RuntimeExceptionX:\TvRock>
- 原因
- 32bit 版の PowerShell のポリシーを変更していなかったため。
- tvrock は 32bit アプリなので tvkrock からコールされるコマンドプロンプトは32bit版となる。
- そこからコールされる PowerShell も32bit 版になるっぽい。
- スタートメニューに登録されている PowerShell を起動して Set-ExecutionPolicy を実行して変更されるのは 64bit版の設定だけのようで、32bit 版の PowerShell からスクリプトをコールする場合は別途ポリシーの登録が必要になる模様。
- 対応
- 以下の手順で、32bit 版 PowerShell のポリシーを変更する。
- 32bit版のPowerShell(下記)を管理者権限で開く
- C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
- Set-ExecutionPolicy コマンドを実行し、然るべきポリシー(RemoteSigned等)を適用する
- Set-ExecutionPolicy ポリシー名
- 32bit版のPowerShell(下記)を管理者権限で開く
- 以下の手順で、32bit 版 PowerShell のポリシーを変更する。
- 参考ページ