LoginSignup
252
225

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-05
  • 環境
    • 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 実行ポリシーはすべてのユーザーに影響する
252
225
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
252
225