「Windows 10ミニTips」は各回の作成時点で最新のWindows 10環境を使用しています。

スクリプトの実行を抑止するWindows 10の設定

Windows PowerShellを起動すると「Execution_Policies」というエラーが発生することがある。実はWindows PowerShellではセキュリティの観点からスクリプトを実行する際の「ExecutionPolicy(実行ポリシー)」を設けている。Windows 10の既定ではスクリプトをRestricted(制限)しているため、個々のコマンドは実行可能だが、スクリプトの実行は許可していない。

  • Windows PowerShellは起動時にプロファイルを読み込んでいるため、図のようなエラーが発生する

  • 適当なスクリプトを実行しても、同様のエラーが発生する

スクリプトに関する設定変更は複数用意されている。一番簡単なのは「設定」を使う方法だ。以下の手順を実行すると、CurrentUser(現在のユーザー)の実行ポリシーが、ローカルスクリプトとリモート署名を持つスクリプトを許可するRemoteSigned(リモート署名済み)に変化する。

  • 「設定」の「更新とセキュリティ/開発者向け」に並ぶPowerShellセクションの「適用」ボタンをクリック/タップする

  • 「Get-ExecutionPolicy -List」を実行して実行ポリシーを確認すると、CurrentUser以外はUndefined(未定義)だ

Windows PowerShellでは、実行ポリシーの範囲をMachinePolicy(グループポリシーによるマシンポリシー)、UserPolicy(グループポリシーによるユーザーポリシー)、Process(プロセス単位: 現在のWindows PowerShellセッションのみ)、CurrentUser(現在のユーザー: 設定をHKEY_CURRENT_USERに格納)、LocalMachine(ローカルマシン: 設定をHKEY_LOCAL_MACHINEに格納)の5段階に定めている。

ローカルマシンよりも現在のユーザー、現在のユーザーよりもプロセス単位の実行ポリシーを優先する仕組みだ。

  • 個別のスコープを変更するには管理者権限を持つWindows PowerShellが必要だ

  • 「Win」+「X」キー→「A」キーと順に押すか、スタートを右クリック/長押しし、「Windows PowerShell(管理者)」をクリック/タップする

  • 「Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine」と入力して「Enter」キーを押し、プロンプトが現れたら「Y」→「Enter」キーと順に押す。Get-ExecutionPolicyコマンドレットで確認すると、LocalMachineの実行ポリシーが変更できたことを確認できる

なお、実行ポリシーとして指定できるのはRemoteSignedの他に、危険なスクリプトも実行できる「AllSigned」、一切ブロックしない「Bypass」、スクリプトにリモート署名を必要とする「RemoteSigned」、未定義状態に戻す「Undefined」、制限を設けないがイントラネットゾーンなどに置かれたスクリプト実行時は警告を発する「Unrestricted」がある。実行ポリシーに関する詳しい情報は公式ドキュメントも合わせて参照してほしい。