tech.chakapoko.com
Home / PowerShell

[PowerShell]実行ポリシー(ExecutionPolicy)を設定する

作成したPowerShellのスクリプトを実行しても、次のようなエラーが出て実行できない場合があります。

PS C:\Users\chapo> .\hello.ps1
.\hello.ps1 : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\chapo\hello.ps1 を読み込むこと
ができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してく
ださい。```

この場合、実行するには実行ポリシーを設定する必要があります。

現在の実行ポリシーを確認する

まず現在の状態を確認します。これには Get-ExecutionPolicy コマンドを使います。

PS C:\Users\chapo> Get-ExecutionPolicy
Restricted

主な実行ポリシーは次の通りです。

ExecutionPolicy説明
AllSigned署名が必要
Bypass実行をブロックしない
RemoteSignedダウンロードしたスクリプトについては署名が必要
Restrictedスクリプトを実行しない

実行ポリシーのスコープ

また、実行ポリシーにはスコープの概念があり、スコープごとに実行ポリシーの設定が可能です。
スコープには優先度の高い順にMachinePolicy, UserPolicy, Process, CurrentUser, LocalMachineがあります。

スコープ説明
MachinePolicyそのマシンのすべてのユーザーに対するのグループポリシー
UserPolicyそのマシンの現在のユーザーに対するグループポリシー
Process現在のPowerShellのセッションでのみ有効な実行ポリシーで、設定は環境変数に保存される
CurrentUser現在のユーザーに対する実行ポリシーで、設定はレジストリに保存される
LocalMachine現在のマシンのすべてのユーザーに対する実行ポリシーで、設定はレジストリに保存される

すべてのスコープにおける実行ポリシーを確認するには、Get-ExecutionPolicyコマンドに-Listオプションをつけます。

PS C:\Users\chapo> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine       Undefined

実行ポリシーを設定する

実行ポリシーを設定するには Set-ExecutionPolicy コマンドを使用します。

PS C:\Users\chapo> help Set-ExecutionPolicy

名前
    Set-ExecutionPolicy

構文
    Set-ExecutionPolicy [-ExecutionPolicy] {Unrestricted | RemoteSigned | AllSigned | Restricted | Default | Bypass | U
    ndefined} [[-Scope] {Process | CurrentUser | LocalMachine | UserPolicy | MachinePolicy}]  [<CommonParameters>]

...

例えば作成したスクリプトを現在のPowerShellセッションでとりあえず動作確認した場合は、実行ポリシーをRemoteSignedに、スコープをProcessに設定すれば良いです。

PS C:\Users\chapo> 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:\Users\chapo> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process    RemoteSigned
  CurrentUser       Undefined
 LocalMachine       Undefined

これで作成したスクリプトが実行できるようになります。