ExecutionPolicyをRestrictedに設定した状態でパソコンを使っていて、実際に経験したことを記録していきます。
ExecutionPolicyの基本

現状の設定確認
Get-ExecutionPolicy
Restricted
スコープと設定値表示
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Restricted
LocalMachine Restricted
スコープの優先順位順(強い → 弱い)で並んでいます。
そして、最終的に有効になる実行ポリシーは「最も強いスコープで Undefined ではないもの」です。
設定変更コマンド
Set-ExecutionPolicy 設定値 -Scope CurrentUser
設定値
Restricted
代表的な ExecutionPolicy をまとめると次の通りです。
| ポリシー | 内容 | 使いどころ |
|---|---|---|
| Restricted | PowerShellスクリプトはすべて禁止 | デフォルト |
| AllSigned | すべてのPowerShellスクリプトに署名が必要 | 厳格な企業環境 |
| RemoteSigned | ローカルは OK、ダウンロードは署名必須 | 個人開発では現実的な設定 |
| Unrestricted | ほぼ無制限 | 検証用のみ |
| Bypass | 制限を完全に無視 | CI・自動化 |
Vsコードでターミナルを起動(Anacondaをインストールしてる場合)
エラーメッセージ:
このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\user\Documents\WindowsPowerShe
ll\profile.ps1 を読み込むことができません。
原因:
ExecutionPolicyを確認
get-ExecutionPolicy
Restricted
Restrictedに設定されているとps1スクリプトが一切実行できないためC:\Users\user\Documents\WindowsPowerShe
ll\profile.ps1 が読み込めない(実行できない。)
🔍 このコードがやっていること
If (Test-Path "C:\Users\user\anaconda3\Scripts\conda.exe") {
(& "C:\Users\user\anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | ?{$_} | Invoke-Expression
}
🧩 1. Test-Path で conda.exe が存在するか確認
Test-Path "C:\Users\user\anaconda3\Scripts\conda.exe"
- 指定したパスに conda.exe が存在するか をチェックします。
- 存在すれば
True、なければFalse。
つまり:
Anaconda がこの場所にインストールされているか確認している
🧩 2. 存在した場合だけ、conda の PowerShell 初期化コードを実行
(& "C:\Users\user\anaconda3\Scripts\conda.exe" "shell.powershell" "hook")
これは conda に対して:
「PowerShell 用の初期化コード(hook)を出力して」
と指示しています。
conda はこのコマンドを受け取ると、PowerShell で conda を使うための設定(環境変数の設定など)を スクリプトとして出力 します。
🧩 3. 出力されたスクリプトを PowerShell に実行させる
| Out-String | ?{$_} | Invoke-Expression
ここがポイント。
Out-String
→ conda が出力した内容を 文字列として扱う?{$_}
→ 空行を除外する(フィルタリング)Invoke-Expression
→ その文字列を PowerShell コードとして実行
つまり:
conda が出力した初期化スクリプトを、そのまま PowerShell に実行させる
🎯 このコードの目的(まとめ)
- Anaconda が特定の場所にあるか確認し
- あれば conda の PowerShell 初期化スクリプトを生成し
- それを PowerShell に実行させて
- conda コマンドを PowerShell で使えるようにする
💡 なぜこうするのか?
PowerShell では、conda を使うために 環境変数や PATH の設定が必要 です。
通常は:
conda init powershell
で設定されますが、
このスニペットは 手動で同じことを実現している 形です。
特に:
- スクリプト実行ポリシーが Restricted の環境
- プロファイルに直接書きたくない場合
- conda の場所を明示的に指定したい場合
などに便利です。
Anaconda PowerShellをツールから実行した場合
Anaconda PowerShell Promptのショートカットのリンク先を見ると以下のようになっている。
%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& 'C:\Users\user\anaconda3\shell\condabin\conda-hook.ps1' ; conda activate 'C:\Users\user\anaconda3' "
PowerShell を “ByPass モードで起動する”(powershell.exe -ExecutionPolicy ByPass -) ことで、conda-hook.ps1がps1ファイルなのに強制的に実行できる。
現状のExecutionPolicyを確認。
get-ExecutionPolicy
Bypass
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined → Bypassに変わってる。
CurrentUser Restricted
LocalMachine Restricted
このリストは、上から順番に優先される。scoopがProcessの意味は、今コマンドを打ったプロセスだけ有効、つまりAnaconda PowerShell Promptのウィンドウだけは、ExecutionPolicyがBypassになっているのでps1を無条件実行できる状態。
Jupiterlabはどうなっているのか
あくまで 「JupyterLab を起動する(activate.bat を叩く)という行為そのもの」 に対してはExecutionPolicy(Restrictedのまま)は変更していないようです。しかし、「JupyterLab をプラットフォームとして PowerShell スクリプトも管理・実行したい」という用途であれば、RemoteSigned への変更は必須のステップになります。(Gemini談)
Jupiterlabのセルで以下はRestrictedでは、実行できない。
!powershell ./myscript.ps1
