PowerShell用のスクリプトファイルを実行した時,以下のようなエラーがで実行出来ない。
D:\home\ueno> PowerShell .\test.ps1 .\test.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル D:\home\ueno\test.ps1 を読み込むことができません。詳細については,「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。 発生場所 行:1 文字:1 + .\test.ps1 + ~~~~~~~~~~ + CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
このエラーが発生する原因は,PowerShellのスクリプトの実行が実行ポリシーによって許可されていないことが原因。
Windows10のディフォルトだと,許可されていないようだ。
以下のコマンドで,PowerShellのスクリプトの実行ポリシーについて確認が出来る。
D:\home\ueno> PowerShell Get-ExecutionPolicy Restricted
デフォルトではこのようにRestrictedという実行ポリシーとなっている。
この設定状態だと,すべてのスクリプトの実行が制限されていることになる。
実行ポリシーとしては,以下の状態がある。
実行ポリシー | 署名あり | 署名なし/ローカル | 署名なし/非ローカル | 説明 |
Restricted | X | X | X | すべてのスクリプトの実行を制限 (初期設定) |
AllSigned | ◯ | X | X | 署名のあるスクリプトのみ実行可能 |
RemoteSigned | ◯ | ◯ | X | ローカル上のスクリプトと非ローカル上の署名のあるスクリプトのみ実行可能 |
Unrestricted | ◯ | ◯ | △ | すべてのスクリプトが実行可能だが非ローカル上のスクリプトは実行時に許可が必要 |
Bypass | ◯ | ◯ | ◯ | すべてのスクリプトが実行可能 |
実行できるように対処するには,以下の2つの方法がある。
D:\home\ueno> PowerShell -ExecutionPolicy RemoteSigned .\test.ps1 test
D:\home\ueno> PowerShell Set-ExecutionPolicy RemoteSigned -Scope CurrentUser D:\home\ueno> PowerShell .\test.ps1 test
実行ポリシーには適用範囲であるスコープがある。 上記のSet-ExecutionPolicyではScopeオプションを指定して適用範囲とともに設定を行います。
スコープ | 適用範囲 |
Process | 実行ポリシーは現在のWindows PowerShellプロセスにのみ影響します。 |
CurrentUser | 実行ポリシーは現在のユーザーにのみ影響します。 |
LocalMachine | 実行ポリシーはコンピューターのすべてのユーザーに影響します。 |
実行ポリシーの保存先は,設定のスコープによって変わる。
スコープ | 保存場所 |
Process | 環境変数PSExecutionPolicyPreference (プロセス起動時にシステムが付与する環境変数設定ではなく,プロセス内部で処理されるもの) |
CurrentUser | レジストリHEKY_CURRENT_USER:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShellのExecutionPolicy |
LocalMachine | レジストリHKEY_LOCAL_MACHINE:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShellのExecutionPolicy |
Processでは環境変数にセットされるので注意する。
新しくコメントをつける