调整PATHEXT
和PATH
环境变量后,可以从命令提示符访问 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,即可开始比赛。当您想将其改回记事本时,请将其改回来。