作成した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
これで作成したスクリプトが実行できるようになります。