Windows 10ではPowerShellスクリプトの実行ポリシーを「設定」アプリから変更できるようになりましたが「設定」アプリからは元には戻せません。
その仕組みと対処方法を説明します。
PowerShellスクリプトの実行ポリシー
Windows 10でPowerShellスクリプトを実行するには、ポリシーを変更する必要があります。
ポリシーには
- Restricted:すべて禁止
- AllSigned:署名されているスクリプトのみ実行可能
- RemoteSigned:ローカルに保存されているスクリプトとダウンロードされて署名されたスクリプトは実行可能
- Unrestricted:ダウンロードしたスクリプトで署名が無いものも許可されれば実行可能
- Bypass:すべて実行可能
と5種類あり、通常は全く実行できない「Restricted」に設定されています。
詳細はこちらの記事で説明されています。
実行ポリシーを変更する
PowerShellスクリプトの実行ポリシーを変更するには、従来はグループポリシーエディター(gpedit.msc)でポリシーを変更するか「Windows PowerShell」からコマンドを実行していました。
しかし、Windows 10では「設定」アプリから変更できます。
「設定」アプリを開いて「更新とセキュリティ」「開発者向け」の「PowerShell」の部分にチェックを入れて「適用」をクリックします。
これでPowerShellスクリプトは実行できるのですが、スクリプトが実行できるということでセキュリティ上は若干危険な状態となります。そのため、必要な処理をしたら元に戻したいと考えた場合でも、ここでの設定は一度設定すると変更できなくなります。
「設定」アプリでの変更の実際
「設定」アプリで元に戻せないなら従来の方法でと管理者権限の「Windows PowerShell」からコマンドを実行してみます。
- Set-ExecutionPolicy Restricted
するとこのようなエラーが表示されます。変更はできたがスコープの設定で上書きされて元に戻されたとのことです。そこでエラーメッセージに従いスコープを見てみると「CurrentUser」で「RemoteSigned」に設定されています。
ポリシーの設定なので「グループポリシーエディター」で
- 「コンピューターの管理」「ユーザーの構成」「管理用テンプレート」「Windowsコンポーネント」「Windows PowerShell」
にある「スクリプトの実行を有効にする」を見ても「未構成」で「RemoteSigned」には設定されていません。
では、どこで設定されているかというと「設定」アプリでの変更は直接レジストリに書き込まれています。
元に戻す方法
元に戻す方法は、該当するレジストリの値を変更または削除する方法と、コマンドでスコープを指定して変更する方法の2通りがあります。
レジストリでの変更
スコープ「CurrentUser」については、
- HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft PowerShell
の下の「ExecutionPolicy」という値を書き換えるか削除します。
スコープ「LocalMachine」については、
- HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft PowerShell
の下の「ExecutionPolicy」という値を書き換えるか削除します。
コマンドでの変更
コマンドで実行する場合は「-Scope」でスコープを指定して変更します。
- Set-ExecutionPolicy Restricted -Scope CurrentUser -Force
変更は上記のレジストリに反映されます。
「Restricted」ではなく「Undefined」とすることでレジストリの値を削除することもできます。
まとめ
恒久的にPowerShellスクリプトを実行できるようにするなら「設定」アプリから変更しても構いませんが、一時的に変更するなら従来通りコマンドで変更した方がよいでしょう。
コメント