告别 5.1:一行命令将右键「使用 PowerShell 运行」升级为 PowerShell 7
让右键「使用 PowerShell 运行」改用 PowerShell 7:一条免管理员命令,或自建 ProgID 完全掌控启动参数,附原理、回滚与避坑。
Windows 自带的右键菜单「使用 PowerShell 运行」,默认调起的依然是老旧的 Windows PowerShell 5.1。如果你已经安装了现代化的 PowerShell 7,完全可以让它全面接管
.ps1脚本。本文提供两种无痛切换方案(强烈推荐第一种),并附带原理说明、一键回滚与避坑指南。
先搞懂原理(30 秒版)
Windows 右键菜单对脚本的处理行为,由三层注册表项串联决定:
.ps1 文件关联 → ProgID(程序标识符) → Shell\<动词>\Command(实际执行的命令)
- 系统默认:
.ps1指向Microsoft.PowerShellScript.1。为防止双击误触发,它的默认打开(Open)是记事本,而右键运行(Run)则指向旧版powershell.exe(5.1)。 - 安装 PowerShell 7(MSI 版)后: 系统里通常会多出一个现成的 ProgID(如
Microsoft.PowerShellScript.7或PowerShell7.script),指向新版的pwsh.exe。
因此,修改的本质只有一句话:在当前用户层重定向 .ps1 的 ProgID,或直接接管它的 Run / Open 动词命令。
方案一(推荐):直接切换文件关联(免管理员权限)
如果你安装的是 MSI 版 PowerShell 7,且系统已注册了对应的 ProgID,只需在任意 PowerShell 窗口(无需管理员权限)执行一条命令:
reg add "HKCU\Software\Classes\.ps1" /ve /d "Microsoft.PowerShellScript.7" /f
或者使用 PowerShell 原生命令:
Set-ItemProperty -Path "HKCU:\Software\Classes\.ps1" -Name "(default)" -Value "Microsoft.PowerShellScript.7"
为什么最推荐这个方案?
- 安全免提权: 仅写入
HKCU(当前用户配置),不触碰系统全局注册表(HKLM),无需管理员权限。 - 非破坏性覆盖: 不篡改系统原有的任何 ProgID,仅仅在用户层做了一层“优先级覆盖”,删掉该键值即可瞬间恢复出厂设置。
- 即改即用: 立即生效,无需重启资源管理器(Explorer)或电脑。
💡 执行前先验证前提:
此方案要求系统中已存在 Microsoft.PowerShellScript.7 及其对应的执行命令。你可以先运行以下命令检查:
Test-Path "Registry::HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.7\Shell\*\Command"
如果返回 True,放心使用方案一;如果返回 False(例如你安装的是微软商店版、便携版,或安装时未勾选注册表关联),请直接采用方案二。
方案二(进阶):自建 ProgID,彻底掌控命令行
自己动手在用户层注册一个专属 ProgID,不仅能通杀所有安装版本(MSI / 商店版 / ZIP 便携版),还能自由定制启动参数(如隐藏版权信息、绕过执行策略等)。
第 1 步:确认 pwsh.exe 的真实路径
(Get-Command pwsh).Source
# MSI 版典型输出:C:\Program Files\PowerShell\7\pwsh.exe
第 2 步:注册专属 ProgID 并绑定右键菜单
将下方脚本中的 $pwsh 替换为你自己的实际路径,复制到任意 PowerShell 窗口中执行:
$pwsh = "C:\Program Files\PowerShell\7\pwsh.exe"
# 1. 注册右键「使用 PowerShell 7 运行」(Run 动词)
New-Item -Path "HKCU:\Software\Classes\MyPsScript7\Shell\Run\Command" -Force | Out-Null
Set-ItemProperty -Path "HKCU:\Software\Classes\MyPsScript7\Shell\Run" -Name "(default)" -Value "使用 PowerShell 7 运行"
Set-ItemProperty -Path "HKCU:\Software\Classes\MyPsScript7\Shell\Run\Command" `
-Name "(default)" -Value "`"$pwsh`" -NoLogo -File `"%1`" %*"
# 2. 注册双击动作 (Open 动词):如果你希望双击直接运行脚本,可一并执行下面两行
New-Item -Path "HKCU:\Software\Classes\MyPsScript7\Shell\Open\Command" -Force | Out-Null
Set-ItemProperty -Path "HKCU:\Software\Classes\MyPsScript7\Shell\Open\Command" `
-Name "(default)" -Value "`"$pwsh`" -NoLogo -File `"%1`" %*"
# 3. 将 .ps1 关联到自建的 ProgID
reg add "HKCU\Software\Classes\.ps1" /ve /d "MyPsScript7" /f
⚡ 常用进阶变体:
如果你的本地脚本经常被执行策略(ExecutionPolicy)拦截,或者脚本运行完窗口一闪而过看不清报错,可以把执行命令改成下面这样(加入 -ExecutionPolicy Bypass 和 -NoExit):
"C:\Program Files\PowerShell\7\pwsh.exe" -NoLogo -NoExit -ExecutionPolicy Bypass -File "%1" %*
⚠️ 安全提示:
-ExecutionPolicy Bypass会无视系统的脚本签名与执行限制。仅建议在个人开发环境中使用,切勿随意运行来源不明的.ps1脚本。
效果验证
- 随便建一个测试脚本(写入
$PSVersionTable.PSVersion; Pause),右键选择运行。 - 观察弹出的终端标题栏或输出的版本号,主版本(Major)显示为
7即代表大功告成。
一键回滚
哪天想恢复系统默认(回到 PowerShell 5.1),只需删掉我们在用户层添加的覆盖项,系统默认配置会立刻重新生效:
# 恢复 .ps1 默认关联
Remove-Item -Path "HKCU:\Software\Classes\.ps1" -Recurse -Force
# (可选)如果你用了方案二,可以顺手清理自建的 ProgID
Remove-Item -Path "HKCU:\Software\Classes\MyPsScript7" -Recurse -Force -ErrorAction SilentlyContinue
避坑指南
- 避开商店版(MSIX)的应用执行别名: 微软商店版默认生成的路径
C:\Users\<用户名>\AppData\Local\Microsoft\WindowsApps\pwsh.exe是一个虚拟重解析点,在部分右键调用场景下可能失效。建议优先安装官方 MSI 包,并在命令中写死稳定的物理路径C:\Program Files\PowerShell\7\pwsh.exe。 - 警惕双击误执行: Windows 默认将
.ps1的双击动作设为“用记事本打开”,是为了防止双击误运行危险脚本。如果你在方案二中把Open动词也改成了pwsh.exe,以后双击.ps1就会直接执行脚本——很爽快,但请务必心里有数。 - 图形界面(GUI)修改的局限性: 右键
.ps1→「打开方式」→ 选中pwsh.exe并勾选“始终”,虽然不用敲命令,但这实际上是通过UserChoice哈希锁死了Open(双击)动作,不仅无法定制启动参数(如-File),有时还会导致右键菜单项丢失或报错,控制力远不如注册表方案。 - Windows 11 右键菜单折叠问题: Win11 的新版右键菜单默认会把传统 Shell 扩展折叠进二级菜单。右键后没看到选项不用慌,点击底部的「显示更多选项」(或按住
Shift+ 右键)即可看到。
本文原发于知乎,作者「滴滴点到」,经作者授权整理收录于 AI SI Daily。
同类推荐
Microsoft PowerToys:功能详解与上手入门指南
了解 Microsoft PowerToys 如何凭借 30 多款实用小工具,助你深度定制 Windows 系统、精简日常任务并全面提升工作效率。
Mac 窗口管理工具 Rectangle:功能概览与上手指南
Rectangle 是一款开源的 macOS 窗口管理应用,支持快捷键分屏、拖拽吸附与网格平铺,能帮助用户快速整理并排布屏幕窗口。
LocalSend 指南:跨平台局域网文件与消息免流互传工具
认识开源局域网传输工具 LocalSend,无需外网服务器,即可在不同设备与系统间快速安全地分享文件和文本消息。