WindowsのPowerShellには「実行ポリシー」という設定があります。
これについて説明します。
この記事の内容
PowerShellの実行ポリシーとは何か
PowerShellでは悪意のあるスクリプトの実行を防ぐために、デフォルトでスクリプトの実行を無効にする設定になっています。
このスクリプトの実行を許可したり禁止したりする設定を「実行ポリシー」と呼びます。
設定は簡単に変更できるので、セキュリティのためというよりはあくまで「意図しない実行を防ぐ」ために使われる機能となります。
PowerShellスクリプトとは何か
PowerShellのスクリプトとは、拡張子「.ps1」で定義されるバッチファイルのようなものです。
この拡張子のファイルはデフォルト状態ではPowerShell上で実行できず、実行ポリシーによって実行を許可する必要があります。
PowerShellスクリプトの実行ポリシーの確認
「get-executionpolicy」コマンドで実行ポリシーの状態を確認できます。
> get-executionpolicy
Restricted
Restrictedはデフォルトのポリシーで、全てのスクリプトが実行禁止という状態です。
PowerShellスクリプトの実行ポリシーの設定
「set-executionpolicy」で実行ポリシーを設定できます。
PowerShellを管理者モードで起動してコマンドを実行します。
> set-executionpolicy -ExecutionPolicy AllSigned
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): y
確認メッセージが表示されるので「Y」を入力してEnterを押せば設定完了します。
実行ポリシーの種類
実行ポリシーの種類は以下です。
ポリシー名 | 概要 |
AllSigned | 署名付きスクリプトのみ実行可能。 |
Bypass | 全てのスクリプトが 一切の警告無く実行可能。 |
RemoteSigned | ダウンロードされたスクリプトの実行には署名が必要。 ローカルのスクリプトは署名無しで実行可能。 |
Restricted | 全てのスクリプトの実行禁止。 |
Unrestricted | 全てのスクリプトが実行できるが、リモートスクリプトの実行時に確認が入る。 |
about_Execution_Policies – PowerShell | Microsoft Docs
ローカルスクリプトと非ローカルスクリプト
PowerShellスクリプトは「ローカルスクリプト」と「非ローカルスクリプト」の2種類で区別されています。
ローカルスクリプト | ローカルマシン上で作られたスクリプト。 |
非ローカルスクリプト | インターネットでダウンロードしてきたスクリプト。 |
非ローカルスクリプトのほうが危険な可能性があるため、実行ポリシーも非ローカルスクリプトに対する制限が強いものが多くなっています。
実行ポリシーのスコープ
実行ポリシーを設定する時に、設定のスコープを設定できます。
Set-ExecutionPolicy
コマンドの-Scopeオ
プションで以下のように指定します。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
全てのユーザーに対して設定したり、ログイン中のユーザーにのみ設定するといったイメージです。
以下がスコープの種類です。
スコープ名 | 概要 |
MachinePolicy | 全てのユーザーに対してグループポリシーによって実行ポリシーを設定する |
UserPolicy | 現在のユーザーに対してグループポリシーによって実行ポリシーを設定する |
Process | 実行中のPowerShellセッションにのみ実行ポリシーを設定する。 |
CurrentUser | 現在のユーザーに対して実行ポリシーを設定する |
LocalMachine | 全てのユーザーに対して実行ポリシーを設定する |
実行ポリシーの説明は以上です。
コメント/ピンバック
[…] 実行ポリシーについてはこちら。 […]