首页 > 解决方案 > .bat 文件无法运行 powershell 7

问题描述

我已经设置了一个非常简单的 .bat 文件来执行几个命令,以节省我每次都输入它们的时间,但是这些进程需要在 powershell 7 中运行。

如果我手动运行 powershell 7.0.3 然后运行命令一切正常,但是运行 .bat 脚本开始

powershell -Version 7.0.3 -Command {XXXXX};

向我显示一条消息“无法启动 Windows PowerShell 版本 7.0.3,因为它未安装。”

如果我尝试在没有版本号的情况下运行它,那么它会在 5.1.x 中运行,然后它会失败,因为它需要 6+。

标签: powershellbatch-filecmd

解决方案


tl;博士

正如Lee_Dailey 所指出的,您必须使用pwsh.exe而不是powershell.exe启动PowerShell [Core] v6+版本,并且您必须调用所需版本的特定可执行文件

在最简单的情况下:

pwsh -Command "XXXXX"

请注意,我已替换{XXXXX}"XXXXX",因为您不能从 PowerShell外部直接执行脚本块( {...}) - 只需将命令作为字符串提供。


鉴于 - 与 Windows PowerShell 不同 -您可以并排安装多个PowerShell [Core] 版本

  • 运行(原文如此;见下文)以报告系统路径中的版本(环境变量中pwsh -version列出的目录中最先出现的实例, )。PATH$env:PATH

  • 如果它不是您要定位的目标,则必须通过其完整路径调用它:

    • 如果您想依赖标准安装位置,您可以在 Windows 7.0 版上使用以下内容: "C:\Program Files\PowerShell\7\pwsh.exe"

    • 要可靠地确定目标版本的可执行位置,请为其打开交互式控制台并运行"$PSHOME\pwsh.exe".


-Versionpowershell.exeWindows PowerShell CLI参数不允许您启动任何PowerShell 版本,只能启动版本的Windows PowerShell

  • 事实上,唯一受支持的参数是-Version 2,而且只有在您之前安装了所需的旧版 .NET Framework 时才会成功。
  • 警告:虽然高于 v5.1 的版本(最新和最后的 Windows PowerShell 版本)会明显导致错误(您看到的那个),但不受支持的较低版本会被悄悄忽略;实际上,-Version 1and-Version 2都将启动 2.0 版,而-Version 3,-Version 4-Version 5被有效地忽略并运行 v5.1 - 验证$PSVersionTable.PSVersion

虽然-Version参数pwsh.exePowerShell [Core] v6+ CLI中仍然存在,但它的含义已经改变:它现在只报告一个版本号,即目标可执行文件自己的(因此不带参数)。


推荐阅读