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