问题描述
每次启动 PowerShell,都会自动执行一个启动脚本:
C:\Users\admin\Documents\WindowsPowerShell\profile.ps1但当前系统的执行策略是禁止运行脚本(通常是Restricted),于是就出现了:
无法加载文件 profile.ps1,因为在此系统上禁止运行脚本
如果好奇现在是什么状态,可以运行:
Get-ExecutionPolicy-List然后记事本打开看一个这个profile.ps1到底是什么东西:
这个文件是 conda 自动生成的,为了能在ps里运行conda。逐行解释:
If(Test-Path"D:\Application\miniconda3\Scripts\conda.exe"){判断 conda 是否存在
防止 conda 被删后 PowerShell 报错
(&"D:\Application\miniconda3\Scripts\conda.exe""shell.powershell""hook")让 conda 输出一段PowerShell 专用初始化脚本
|Out-String|?{$_}|Invoke-Expression把这段脚本「当成 PowerShell 代码执行」
整个文件目的是:
conda命令可用conda activate xxx不会报错(base)/(env)前缀能正常显示
如果这个脚本不生效的话,就无法在ps直接执行conda activate,包括在一些默认终端是powershell的ide里无法用conda,除非执行cmd转换成命令提示符终端。(这样就很蠢对吧,我之前一直没发现这个问题,所以一直都是把ps变成cmd用的)
解决方案
方案 1(最推荐):只放开「当前用户」
这是最安全、最常用的做法,不影响系统其他用户。
1️⃣ 以「普通方式」打开 PowerShell 而不用管理员身份
(额其实用管理员运行也可以,反正-Scope CurrentUser改的也是当前用户的设置。区别只是不需要输入Y确认了而已。)
2️⃣ 执行下面这条命令:
Set-ExecutionPolicy-Scope CurrentUser-ExecutionPolicy RemoteSignedRemoteSigned的含义是:
- 本机写的脚本:可以运行
- 从网上下载的脚本:需要签名
- profile.ps1 属于本机脚本 →完全没问题
3️⃣ 出现提示时,输入:
Y4️⃣ 关闭 PowerShell,重新打开
这是微软官方也推荐的日常设置。
方案 2:不需要 profile.ps1
如果根本不需要 profile.ps1:直接删掉这个文件即可
比如说你根本没有在ps用conda的需求,你仅仅使用anaconda prompt和cmd。
方案 3(不推荐):彻底关闭脚本限制
Set-ExecutionPolicyUnrestricted不推荐,因为:
- 所有脚本都能跑
- 有安全风险
- 一般只有测试环境才这么干