✅ 启用 .ps1 脚本的本机/直接执行 - 如何操作
换句话说:将 .ps1 文件视为与 .cmd 或 .bat 文件相同 - 您可以双击或从控制台/shell 键入其名称,它将运行脚本
答案如下:通过一些实验,我自己能够回答这个问题,所以想与任何想要这样做的人分享。
答案1
概括
实现此功能有两个部分(但都相对容易)...
1️⃣ 将“.PS1”添加到PATHEXT
环境变量
2️⃣ 指定主机程序和任何行为选项Registry
第 1 部分:PATHEXT
- 编辑系统环境变量 - 运行(提升)
rundll32.exe sysdm.cpl,EditEnvironmentVariables
,或者在开始菜单中搜索“环境”/“变量” - 在第二个框中,你会看到一个名为的变量
PATHEXT
,修改它 - 添加
;.PS1
到列表末尾(分隔符 + .ps1 扩展名)。└
注意:扩展名的顺序很重要,因为这是 Windows 搜索/执行文件的顺序(例如,如果您在同一目录中有MyScript.bat
、MyScript.cmd
,并且只需在命令 shell 中输入,Windows 将运行与它找到的第一个扩展名匹配的文件,并按照 PATHEXT 中指定的顺序进行搜索MyScript.ps1
MyScript
✅ Windows 现在将运行 .ps1 脚本,并且(如果您愿意)您可以在不指定扩展名的情况下调用脚本
。⚠️然而:Windows 将使用为 .ps1 文件类型指定的默认操作/处理程序(在我的情况下,这实际上是在 中打开脚本powershell_ise.exe
),因此您可能也希望调整这些(参见第 2 部分)
第 2 部分:默认命令(注册表)
(在我进行上述更改之前,我已经在想:“将使用 pwsh.exe 还是 powershell.exe?”和“它会使用配置文件吗,如果是的话,哪一个?”但发现所有这些都由默认命令巧妙地处理,并且您在那里指定的任何内容都会在运行它时应用于脚本)
下面提供了注册表代码,但首先这里是对组件的解释......
- 您可以选择使用
powershell.exe
(版本 5,包含在 Windows 中)或pwsh.exe
(版本 7,更现代、跨平台的版本,您可以手动安装) - 默认情况下,在运行 PowerShell 脚本之前,它将显示 PowerShell 标头(版权信息等)。或者,可以使用以下命令禁用此功能
-NoLogo
(我个人更喜欢这个,尤其是因为它将 PowerShell 更直接地“混合”到 cmd shell 中,但接受其他用户可能更喜欢保持 cmd/PowerShell 更加独特) - 如果您已创建配置文件,PowerShell 将在运行脚本之前加载该配置文件。或者,可以使用以下命令禁用该配置文件
-NoProfile
将以上部分放在一起
PowerShell Script (ps1) - Default action, run.reg
-------------------------------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.ps1\Shell]
@="pwsh_NoProfile"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.ps1\Shell\pwsh_NoProfile]
@="&Run in pwsh.exe"
"Icon"="C:\\Program Files\\PowerShell\\7\\pwsh.exe,0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.ps1\Shell\pwsh_NoProfile\command]
@="\"C:\\Program Files\\PowerShell\\7\\pwsh.exe\" -NoLogo -NoProfile -File \"%1\""
注意:通常,您会在 HKEY_CLASSES_ROOT 中向文件类型添加命令,但是 Windows 似乎对 .ps1 关联做了一些奇怪的事情,因此在上面的 .reg 文件中,我已将命令直接添加到 SFA 部分中的扩展名中,因为这似乎更可靠。
就是这样!
上述环境变量更改和注册表更新将允许您.ps1
通过双击或在控制台/cmd shell 中调用其名称来运行任何文件