概要
PowerShell でスクリプトを書いて実行したとき、以下のエラーが表示されてスクリプトが実行できない場合があります。
c:\work>PowerShell .\test.ps1
.\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\work\test.ps1 を読み込むことができませ
ん。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ .\test.ps1
+ ~~~~~~~~~~
+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
本記事ではエラーを回避してスクリプトを実行するための手順について記載します。
エラーの原因
Windows の初期設定では PowerShell のスクリプトの実行が実行ポリシーによって許可されていないことが原因です。
次のコマンドを実行することで PowerShell のスクリプトの実行ポリシーについて確認できます。
c:\work>PowerShell Get-ExecutionPolicy
Restricted
初期設定では Restricted の実行ポリシーとなっています。
このポリシーではすべてのスクリプトの実行が制限されています。
ちなみに、実行ポリシーとしては以下の種類があります。
実行ポリシー | 署名あり | 署名なし/ローカル | 署名なし/非ローカル | 説明 |
---|---|---|---|---|
Restricted | x | x | x | すべてのスクリプトの実行を制限 (初期設定) |
AllSigned | o | x | x | 署名のあるスクリプトのみ実行可能 |
RemoteSigned | o | o | x | ローカル上のスクリプトと非ローカル上の署名のあるスクリプトのみ実行可能 |
Unrestricted | o | o | △ | すべてのスクリプトが実行可能だが非ローカル上のスクリプトは実行時に許可が必要 |
Bypass | o | o | o | すべてのスクリプトが実行可能 |
対処方法
対処方法としては以下の2つがあります。
(1) ExecutionPolicy オプションによる実行ポリシーの変更
PowerShell のスクリプトの実行時に引数へ ExecutionPolicy
を指定して実行します。
c:\work>PowerShell -ExecutionPolicy RemoteSigned .\test.ps1
test
実行するスクリプトに対してのみ指定した実行ポリシーが適用されます。
(2) Set-ExecutionPolicy による実行ポリシーの変更 (恒久的)
実行ポリシーを恒久的に変更します。
この操作はシステム全体に影響を与えるため、管理者権限が必要となります。
c:\work>PowerShell Set-ExecutionPolicy RemoteSigned
c:\work>PowerShell .\test.ps1
test
以降は指定した実行ポリシーが適用されます。