如何从命令行运行 PowerShell 脚本,而不是打开记事本?

如何从命令行运行 PowerShell 脚本,而不是打开记事本?

调整PATHEXTPATH环境变量后,可以从命令提示符访问 PowerShell 脚本。但问题是,当尝试执行脚本(即路径上的CMD> foobar位置foobar.ps1)时,记事本会打开脚本,而不是调用 Powershell 来执行脚本。

目标是能够运行CMD> foobar和调用 PowerShell 脚本并将结果直接返回到控制台。

以下是一些解决方案,虽然有些接近但不能满足需求:

  • 将执行策略设置为更宽松的设置
    • 虽然这有帮助,但它不允许我.ps1直接从 CMD 命令行运行 s。
  • 打开 PowerShell 提示符并运行脚本
    • 这有点违背了目的。虽然我转变为 PowerShell 优先的思维方式,在此期间我需要解决方案。
  • 设置注册表项以双击脚本
    • 这有点帮助,但我认为它实际上对这个问题没有任何作用。
  • 使用以下命令添加前缀powershell -File
    • 这并不能解决问题,因为我想解决CMD> foobar,而不是CMD> powershell -File foobar

答案1

事实证明,解决方案在于文件关联 - 但不在注册表中(尽管它可能确实存在于注册表中某处)。

我偶然发现这个帖子(这是一个设置批量文件关联的脚本),在我偶然发现这一页试图解决这个问题。

不幸的是,后者说你只需要assoc .ps1=pwsh.exe,这只完成了 50%。结果你需要ftype assoc因为它们协同工作并正确执行任务:

CMD> ftype Custom.PowerShellScript="C:\Program Files\PowerShell\7\pwsh.exe" "%0" %*
CMD> assoc .ps1=Custom.PowerShellScript

运行这两个命令后,系统可能会提示您使用特定的可执行文件运行,一开始看起来是错误的,但再次运行该命令(是的,白痴检查)证明这实际上是解决方案!

编辑:该ftype命令略有错误。虽然它确实有效,但此修订版使其能够使用命令行参数执行。

答案2

这是 Windows 操作系统的风险管理设置。

您必须调用 powershell.exe 或 pwsh.exe(如果安装了 PSCore 并且您喜欢使用该版本)。

PowerShell 默认与记事本关联是有原因的,特别是安全性。

不要改变这种关联。.ps不是可执行文件,因此您需要明确启动 powershell/pwsh.exe。更改该关联还可以只打开 Windows 资源管理器,然后双击运行,但同样会带来不必要的暴露风险。

更改该扩展名将使您面临不必要的风险,如果这是公司设备,则可能违反公司安全/风险政策,从而使您面临负面的人力资源事件。

Windows 将 *.PS1 文件的默认操作设置为在记事本中打开它们,而不是将它们发送到 PowerShell 命令解释器。这是为了直接防止恶意脚本在双击时被意外执行。

如果这是你的个人设备,那么当然,你可以这样做,当然,你也要接受由此产生的所有后果

要配置双击直接启动 PowerShell 脚本:

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 0

要配置双击在 PowerShell ISE 中打开 PowerShell 脚本:

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Edit'

要恢复默认值(设置双击在记事本中打开 PowerShell 脚本):

Set-ItemProperty HKCR:\Microsoft.PowerShellScript.1\Shell '(Default)' 'Open'

或者只需在 Windows 资源管理器中右键单击 .ps1 文件,然后将“打开方式”选项更改为 powershell.exe 或 pwsh.exe,即可​​开始比赛。当您想将其改回记事本时,请将其改回来。

相关内容