右键“用PowerShell运行”脚本报错,直接运行无异常的技术咨询
问题分析与解决方案
1. 右键“用PowerShell运行”的实际行为
Windows资源管理器中右键.ps1文件选择“用PowerShell运行”时,默认执行的命令是:
powershell.exe -Command "Set-ExecutionPolicy RemoteSigned -Scope Process -Force; & '%1'"
它会先尝试将Process作用域的执行策略设为RemoteSigned,但你的MachinePolicy已经是Unrestricted(优先级更高),导致这个设置被覆盖,从而弹出你看到的提示——但脚本本身仍会继续执行,所以你能成功创建目录。
2. PowerShell执行策略的优先级(从高到低)
- MachinePolicy:由组策略为计算机所有用户设置,优先级最高
- UserPolicy:由组策略为当前用户设置
- Process:仅对当前PowerShell进程有效,关闭进程后失效
- CurrentUser:仅对当前用户生效
- LocalMachine:对计算机所有用户生效,优先级最低
你的Get-ExecutionPolicy -List输出显示MachinePolicy和LocalMachine都是Unrestricted,所以任何更低优先级的执行策略设置都会被MachinePolicy覆盖。
3. 无权限修改右键菜单时的解决方法
方案1:创建脚本快捷方式
- 右键.ps1脚本,选择“创建快捷方式”
- 右键快捷方式,选择“属性”
- 在“目标”栏中,将原内容替换为:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "C:\完整路径\你的脚本.ps1"
-NoProfile:跳过PowerShell配置文件加载,加快启动速度-ExecutionPolicy Bypass:直接绕过执行策略检查,不会触发右键默认的Set-ExecutionPolicy操作
- 点击“确定”,之后双击这个快捷方式就能干净运行脚本,无报错
方案2:使用Shift+右键的“在此处打开PowerShell窗口”
- 按住Shift键,右键脚本所在文件夹,选择“在此处打开PowerShell窗口”
- 在窗口中输入
.\脚本名.ps1运行,这种方式和你手动打开PowerShell运行效果一致,不会触发额外的执行策略设置
内容的提问来源于stack exchange,提问作者charlesz
相关产品推荐
相关产品推荐

