Skip to content

PowerShellでスクリプト実行が無効な場合の対処法

問題

Pythonの仮想環境をアクティベートしようとした際、以下のエラーが発生しました:

powershell
& : File C:\Users\pc\Documents\python\venv\Scripts\Activate.ps1 cannot be loaded because running scripts is 
disabled on this system. For more information, see about_Execution_Policies at 
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:3
+ & c:/Users/pc/Documents/python/venv/Scripts/Activate.ps1
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

このエラーはPowerShellの**実行ポリシー(Execution Policy)**が制限されているために発生します。

実行ポリシーとは

PowerShellの実行ポリシーは、スクリプトファイル(.ps1)の実行を制御するセキュリティ機能です。デフォルトでは、Windowsシステム上でPowerShellスクリプトの実行は制限されています。

実行ポリシーの種類

  • Restricted: スクリプトの実行を禁止(デフォルト設定)
  • RemoteSigned: ダウンロードしたスクリプトにはデジタル署名が必要
  • Unrestricted: すべてのスクリプトを実行可能(警告あり)
  • Bypass: すべてのスクリプトを警告なしで実行

解決方法

現在の実行ポリシーを確認する

まず、現在の実行ポリシーを確認しましょう:

powershell
Get-ExecutionPolicy

方法1: 現在のユーザーに対するポリシーを変更(推奨)

管理者権限が不要で、セキュリティリスクが低い方法です:

powershell
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned

RemoteSignedは、インターネットからダウンロードしたスクリプトには署名を要求しつつ、ローカルで作成したスクリプトは実行可能にするバランスの良い設定です。

方法2: 管理者によるシステム全体の設定変更

より広範囲な変更が必要な場合:

powershell
# 管理者としてPowerShellを実行
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine
powershell
# 変更が適用されたか確認
Get-ExecutionPolicy -List

管理者権限について

この方法ではPowerShellを管理者として実行する必要があります:

  1. Windowsボタンを押す
  2. 「PowerShell」と入力
  3. 「Windows PowerShell」を右クリック
  4. 「管理者として実行」を選択

方法3: 一時的なポリシー変更

一時的にのみスクリプトを実行したい場合:

powershell
# 現在のセッションでのみ制限を解除
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

方法4: 特定のファイルのみブロック解除

pyenvなどの特定ツール用:

powershell
Unblock-File (Join-Path $env:PYENV 'bin/pyenv.ps1')

実行ポリシーの比較

ポリシーセキュリティレベルローカルスクリプトダウンロードスクリプト
Restricted××
RemoteSigned署名必要
Unrestricted警告あり
Bypass最低

ベストプラクティス

セキュリティの推奨設定

RemoteSignedが最もバランスの取れた設定です。ローカルスクリプトは実行可能にしつつ、インターネットからダウンロードした潜在的に危険なスクリプトから保護します。

注意点

UnrestrictedBypassはセキュリティリスクが高くなります。必要な場合のみ一時的に使用し、終了後は元の設定に戻すことを推奨します。

トラブルシューティング

変更後も問題が解決しない場合:

  1. PowerShellセッションを再起動
  2. コマンドを再実行
  3. 管理者権限での実行を確認
  4. グループポリシーによる制限がないか確認
powershell
# すべてのスコープの実行ポリシーを確認
Get-ExecutionPolicy -List

このガイドがPowerShellスクリプト実行の問題解決に役立つことを願っています。安全な開発環境を維持しながら、必要なスクリプトを円滑に実行できるようになりましょう。