Chocolatey 導入時など、セキュリティエラーによって ps1 を読み込むことできませんと表示された際は、実行ポリシーを変更します
動作確認環境
Windows 10
Windows 11
Powershell を利用していると以下のようなエラーに遭遇することがあります
. : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\uName\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。発生場所 行:1 文字:3+ . 'C:\Users\uName\Documents\WindowsPowerShell\Microsoft.PowerShell_pr ...+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException+ FullyQualifiedErrorId : UnauthorizedAccess
これは、安全でないと考えられるスクリプトの実行を抑制しているもので、例えば Chocolatey の実行時や、インターネットからダウンロードしてきた .ps1 ファイルを実行したりすると遭遇する可能性があります
この場合は Powershell の実行ポリシーを少し緩めてあげると良いです
まずは、現状のどの実行ポリシーが適用されているかを確認します
Get-ExecutionPolicy -List私の環境では以下のように表示されました。特にポリシーの設定 (定義) はありませんでした
Scope ExecutionPolicy----- ---------------MachinePolicy UndefinedUserPolicy UndefinedProcess UndefinedCurrentUser UndefinedLocalMachine Undefined
ひとまずは CurrentUser のポリシーのみを変更することで事足りると思います
設定できるポリシーの種類は以下になっていて、下に行くほどセキュリティが弱くなります
| ポリシーの種類 | 署名つき | 署名なし (ローカル) | 署名なし (リモート) | 概要 |
|---|---|---|---|---|
Restricted | × | × | × | すべてのスクリプトの実行を禁止します |
AllSigned | ⭕ | × | × | 署名されたスクリプトのみを実行します |
RemoteSigned | ⭕ | ⭕ | × | ローカルに保存済みのすべてのスクリプトを実行します |
Unrestricted | ⭕ | ⭕ | ⚠️ | リモートのスクリプト実行時は確認します |
Bypass | ⭕ | ⭕ | ⭕ | すべてのスクリプトを実行できます |
利便性とセキュリティの面を考えると RemoteSigned が適切だと思うので、今回はこのポリシーを設定します
管理者権限で Powershell を起動し、以下のコマンドを実行します
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Forceこれで警告の表示を抑制して、スクリプトを実行できるようになりました 🎉
おわりに
久々に PC を初期化する羽目になってちょっとハマったのでメモしました 🐶