こんにちは。チェシャ男です。(-皿-)
今回は、Set-ExecutionPolicy について概要から使用例について簡単にご紹介します。
「コマンドレットリファレンス」カテゴリの記事では省略している情報を参照したい場合にご覧ください。
もくじ
はじめに
本記事は英語のリファレンス情報しかないコマンドレットについて「Get-Help」等の情報を参考に検証した結果を掲載しています。公式見解ではないことにご注意ください。
正式なヘルプを参照したい場合は、「Get-help Set-ExecutionPolicy-online」を実行し公式ヘルプをご覧ください。
また、本記事内の例は動作を確認していますが、動作を確約しているわけではありません。
Set-ExecutionPolicy の概要
Set-ExecutionPolicy は、PowerShell の実行ポリシーを変更します。
[blogcard url=”https://cheshire-wara.com/powershell/ps-cmdlets/sequrity/set-executionpolicy/”]基本構文
#パターン① Set-ExecutionPolicy [-ExecutionPolicy] <ExecutionPolicy> {Unrestricted | RemoteSigned | AllSigned | Restricted | Default | Bypass | Undefined} [[-Scope] <ExecutionPolicyScope> {Process | CurrentUser | LocalMachine | UserPolicy | MachinePolicy}] [-Confirm] [-Force] [-WhatIf] [<CommonParameters>]
動作の説明
Set-ExecutionPolicy コマンドレットは、PowerShell に設定されている実行ポリシーの設定値を変更します。
実行ポリシーは PowerShell のセキュリティの一環として設けられています。 構成ファイル(Windows PowerShell プロファイルを含む)を読み込んでスクリプトを実行していいかどうかを判断し、署名が必要な場合はスクリプトが実行される前にデジタル署名を確認します。
デフォルトでは LocalMachineスコープ(全ユーザに対する範囲)の実行ポリシーを変更するため、PowerShell を「管理者として実行」として起動する必要があります。
パラメータ
-Confirm [<SwitchParameter>]
コマンドレットを実行する前に、続行するかしないかの確認を求めるプロンプトが表示されます。
-ExecutionPolicy <ExecutionPolicy>
新しい実行ポリシーを指定します。
このオプションに設定できる値は次の6パターンです。
- Restricted:
構成ファイルを読み込んだり、スクリプトを実行したりしません。 Restricted はデフォルトの実行ポリシーです。 - AllSigned:
ローカルコンピュータで作成したものを含む、全てのスクリプトと構成ファイルに信頼できる発行元からの署名が必要になります。一部のサーバ OS ではデフォルトの実行ポリシーです。 - RemoteSigned:
インターネットからダウンロードされたすべてのスクリプトおよび設定ファイルに、信頼できる発行元の署名が必要になります。 - Unrestricted:
すべての構成ファイルをロードし、すべてのスクリプトを実行します。 インターネットからダウンロードした署名のないスクリプトを実行すると、実行前にアクセス許可の入力を求められます。 - Bypass:
何もブロックされず、警告やプロンプトも表示されないようにします。 - Undefined:
現在割り当てられている実行ポリシーを削除(未定義)します。 このオプションは、グループポリシースコープで設定されている実行ポリシーを削除しません。
-Force [<SwitchParameter>]
強制的に。 既定適用します。既定では実行ポリシーの変更に警告が表示されます。
-Scope <ExecutionPolicyScope>
実行ポリシーの適用範囲を指定します。 デフォルトではLocalMachine(全ユーザ)の適用範囲です。 実行ポリシーを特定のスコープから削除するには、そのスコープの実行ポリシーをUndefinedに設定します。
このオプションに設定できる設定値は次の3つです。
- Process:
実行ポリシーが現在のPowerShellプロセスにのみに適用されます。 - CurrentUser:
実行ポリシーが現在のユーザにのみ適用されます。 - LocalMachine:
実行ポリシーがコンピュータのすべてのユーザに適用されます。
Scope オプションの値が「Process」の場合、実行ポリシーはレジストリではな環境変数PSExecutionPolicyPreference に保存されています。しかし、変数に直接代入することによって、プロセスの実行ポリシーを変更することはできません。
-WhatIf [<SwitchParameter>]
コマンドレットを実際には実行せず、実行された場合の動作を返します。
<CommonParameters>
このコマンドレットは、
Verbose、Debug、ErrorAction、ErrorVariable、WarningAction、WarningVariable、OutBuffer、PipelineVariable、OutVariable
の各共通パラメーターをサポートしています。
入力値
Microsoft.PowerShell.ExecutionPolicy, System.String
実行ポリシーオブジェクトまたは実行ポリシーの名前を含む文字列を Set-ExecutionPolicy にパイプすることができます。
出力値
None
このコマンドレットは出力を返しません。
備考
Process 以外のオプションを指定して Set-ExecutionPolicy を使用すると新しいユーザ設定はレジストリに保存され、変更するまで更新されません。
オプションの値が Process の場合、ユーザーの設定はレジストリではなくPSExecutionPolicyPreference 環境変数に格納され有効なセッションが閉じられると削除されます。
グループポリシーでコンピュータまたはユーザーに対して「スクリプト実行を有効にする」場合、ユーザの優先順位は保存されますが有効ではなく、Windows PowerShell は競合を説明するメッセージを表示します。 ユーザーの設定がポリシーよりも制限的であっても、Set-ExecutionPolicy を使用してグループポリシーを上書きすることはできません。
使用例
例1:PowerShell の実行ポリシーを設定
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned 実行ポリシーの変更 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか? [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y
この例では、コンピュータの現在の実行ポリシーを変更しています。
例2:グループポリシーと競合する実行ポリシーを設定する
PS C:\>Set-ExecutionPolicy -ExecutionPolicy Restricted Set-ExecutionPolicy : Windows PowerShell updated your local preference successfully, but the setting is overridden by the group policy applied to your system. Due to the override, your shell will retain its current effective execution policy of "AllSigned". Contact your group policy administrator for more information. At line:1 char:20 + Set-ExecutionPolicy <<<< restricted
この例では、実行ポリシーをRestrictedに設定しようとしています。実行ポリシーの設定値はローカルで設定した値より、グループポリシーで制限された値の方が優勢になります。
Restricted設定はレジストリに書き込まれますが、グループポリシーと競合するため、グループポリシーよりも制限が厳しくても効果的はありません。
例3:リモートコンピュータの実行ポリシーをローカルコンピュータに適用する
PS C:\>Invoke-Command -ComputerName "Server01" -ScriptBlock {Get-ExecutionPolicy} | Set-ExecutionPolicy -Force
この例では、リモートコンピュータの実行ポリシーを取得し、その実行ポリシーをローカルコンピュータに適用しています。
Invoke-Command コマンドレットを使用してリモートコンピュータにコマンドを送信しています。
Set-ExecutionPolicy は「Microsoft.PowerShell.ExecutionPolicy」オブジェクトをパイプ処理から受け取れるため、”ExecutionPolicy” オプションが必要ありません。
例4:実行ポリシーの有効範囲を指定する
PS C:\>Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned -Force PS C:\>Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process Undefined CurrentUser AllSigned LocalMachine RemoteSigned PS C:\>Get-ExecutionPolicy AllSigned
この例は、特定のスコープに実行ポリシーを設定しています。
最初のコマンドレットは、Set-ExecutionPolicy コマンドレットで現在のユーザに対して「AllSigned」の実行ポリシーを設定しています。”Force” オプションを使用しているため確認画面は表示されません。
Get-ExecutionPolicy コマンドレットでは ”List” オプションを使用して、各スコープで設定された実行ポリシーを取得します。
結果は、現在のユーザ (CurrentUser) に設定されている実行ポリシーがコンピュータのすべてのユーザ (LocalMachine) に設定されている実行ポリシーより優勢であることがわかります。
例5:現在のユーザの実行ポリシーを削除する
PS C:\>Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Undefined 実行ポリシーの変更 実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies のヘルプ トピック (http://go.microsoft.com/fwlink/?LinkID=135170) で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか? [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y
では、実行ポリシー”Undefined” を使用して現在 (CurrentUser) スコープに設定されている実行ポリシーを削除しています。
すべてのスコープに対して実行ポリシーをUndefinedに設定した場合、既定の実行ポリシー ”Restricted” がコンピュータのすべてのユーザに有効化されます。
例6:現在のセッションの実行ポリシーを設定する
PS C:\> Set-ExecutionPolicy -Scope Process -ExecutionPolicy AllSigned PS C:\> Get-ExecutionPolicy -List Scope ExecutionPolicy ----- --------------- MachinePolicy Undefined UserPolicy Undefined Process AllSigned CurrentUser Undefined LocalMachine RemoteSigned
この例では、現在のPowerShellセッションに対してのみ ”AllSigned” の実行ポリシーを設定しています。
この実行ポリシーは PSExecutionPolicyPreference 環境変数に保存されるためレジストリの値には影響しません。 変数とその値は、現在のセッションが閉じられると削除されます。