启用 .ps1 文件的直接/本机运行 - 如何操作

启用 .ps1 文件的直接/本机运行 - 如何操作

✅ 启用 .ps1 脚本的本机/直接执行 - 如何操作

换句话说:将 .ps1 文件视为与 .cmd 或 .bat 文件相同 - 您可以双击或从控制台/shell 键入其名称,它将运行脚本

答案如下:通过一些实验,我自己能够回答这个问题,所以想与任何想要这样做的人分享。


答案1

概括

实现此功能有两个部分(但都相对容易)...
1️⃣ 将“.PS1”添加到PATHEXT环境变量
2️⃣ 指定主机程序和任何行为选项Registry


第 1 部分:PATHEXT

  1. 编辑系统环境变量 - 运行(提升)rundll32.exe sysdm.cpl,EditEnvironmentVariables,或者在开始菜单中搜索“环境”/“变量”
  2. 在第二个框中,你会看到一个名为的变量PATHEXT,修改它
  3. 添加;.PS1到列表末尾(分隔符 + .ps1 扩展名)。└
    注意:扩展名的顺序很重要,因为这是 Windows 搜索/执行文件的顺序(例如,如果您在同一目录中有MyScript.batMyScript.cmd,并且只需在命令 shell 中输入,Windows 将运行与它找到的第一个扩展名匹配的文件,并按照 PATHEXT 中指定的顺序进行搜索MyScript.ps1MyScript

✅ Windows 现在将运行 .ps1 脚本,并且(如果您愿意)您可以在不指定扩展名的情况下调用脚本
。⚠️然而:Windows 将使用为 .ps1 文件类型指定的默认操作/处理程序(在我的情况下,这实际上是在 中打开脚本powershell_ise.exe),因此您可能也希望调整这些(参见第 2 部分


第 2 部分:默认命令(注册表)

(在我进行上述更改之前,我已经在想:“将使用 pwsh.exe 还是 powershell.exe?”和“它会使用配置文件吗,如果是的话,哪一个?”但发现所有这些都由默认命令巧妙地处理,并且您在那里指定的任何内容都会在运行它时应用于脚本)

下面提供了注册表代码,但首先这里是对组件的解释......

  1. 您可以选择使用powershell.exe(版本 5,包含在 Windows 中)或pwsh.exe(版本 7,更现代、跨平台的版本,您可以手动安装
  2. 默认情况下,在运行 PowerShell 脚本之前,它将显示 PowerShell 标头(版权信息等)。或者,可以使用以下命令禁用此功能-NoLogo(我个人更喜欢这个,尤其是因为它将 PowerShell 更直接地“混合”到 cmd shell 中,但接受其他用户可能更喜欢保持 cmd/PowerShell 更加独特)
  3. 如果您已创建配置文件,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 中调用其名称来运行任何文件

相关内容