184

この記事は最終更新日から3年以上が経過しています。

投稿日

更新日

PowerShellでこのシステムではスクリプトの実行が無効になっているため、ファイル hoge.ps1 を読み込むことができません。となったときの対応方法

  • 環境
    • Windows10 Pro 64bit バージョン1803
    • PowerShell 5.1.17134.858

事象 : 初めてPowerShellでソースファイルを実行したら怒られた。

PS C:> hoge.ps1
このシステムではスクリプトの実行が無効になっているため、ファイル hoge.ps1 を読み込むことができません。詳細については、「about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
    + CategoryInfo          : セキュリティ エラー: (: ) []ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnauthorizedAccess

原因 : 実行ポリシーが初期値のままだから

PowerShellは、ソースファイルに書かれたコードを初期状態では実行できない。

実行ポリシーは、PowerShellが読み込む構成ファイルや実行するスクリプトに関する条件を決定します。
初期値は「Restricted」で、個々のコマンドは実行できますが、書式設定ファイル(.ps1xml)、モジュールスクリプトファイル(.psml)、およびPowerShellプロファイル(.ps1)を含むすべてのスクリプトファイルの実行が禁止されます。
Windows PowerShell逆引きハンドブック

# 実行ポリシーを確認する
PS C:> Get-ExecutionPolicy
Restricted

対応 : Set-ExecutionPolicyで実行ポリシーを設定する

セキュリティを考えると使い終わったら実行ポリシーは元に戻したほうが良い気がする。

  1. Windows PowerShellを起動
  2. Set-ExecutionPolicyコマンドで実行ポリシーを変更
  3. ps1ファイルを実行
  4. Set-ExecutionPolicyコマンドで実行ポリシーを戻す

PowerShellスクリプトを簡単実行 - Qiita

が、めんどうくさい・・・のでその時のプロセスだけ有効にして終わったら元に戻るようにスコープをProcessで設定する。
そうすれば、管理者権限でPowerShellを実行しなくて済むという利点もある。

スコープを実行中のプロセスに絞れば実行ポリシーを変更できます。
管理者権限なしでPowerShellスクリプトを実行する方法 - Qiita

# (書き方)Set-ExecutionPolicy -ExecutionPolicy <実行ポリシー> -Scope <スコープ>
PS C:> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process

実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック
(https://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "N"): y

# 確認してみる
PS C:> Get-ExecutionPolicy
RemoteSigned

# もう一度動かしてみる
PS C:> hoge.ps1
動いた!

実行ポリシーの種類

実行ポリシー 説明
AllSigned ローカルコンピューターで作成されたスクリプトを含め、すべてのスクリプトと構成ファイルが信頼できる発行元によって署名されている必要があります。
Bypass 何もブロックされず、警告やプロンプトも表示されません。
RemoteSigned インターネットからダウンロードしたすべてのスクリプトと構成ファイルが、信頼できる発行元によって署名されている必要があります。Windowsサーバーコンピューターでの既定の実行ポリシーです。
Restricted 構成ファイルのロードやスクリプトの実行は行いません。Windowsクライアントでの既定の実行ポリシーです。
Undefined スコープに実行ポリシーが設定されていません。グループポリシーで設定されていないスコープから、割り当てられた実行ポリシーを削除します。すべてのスコープの実行ポリシーがUndefinedの場合、有効な実行ポリシーはRestrictedになります。
Unrestricted PowerShell 6.0以降、これはWindows以外のコンピューターに対する既定の実行ポリシーとなり、変更できなくなりました。すべての構成ファイルをロードし、すべてのスクリプトを実行します。インターネットからダウンロードした署名なしスクリプトを実行すると、実行前に許可を求めるメッセージが表示されます。

スコープの種類

スコープ 説明
Process 実行ポリシーは現在のPowerShellプロセスのみ影響する
CurrentUser 実行ポリシーは現在のユーザーのみ影響する
LocalMachine 実行ポリシーはすべてのユーザーに影響する

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について
184