Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
74
Help us understand the problem. What is going on with this article?
@ponsuke0531

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

More than 1 year has passed since last update.
  • 環境
    • 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 実行ポリシーはすべてのユーザーに影響する
74
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ponsuke0531
びっくりするほど物覚えが悪いが、エンジニアを目指しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
74
Help us understand the problem. What is going on with this article?