.Bat文件无法运行powershell 7

Tho*_*ner 4 powershell cmd batch-file

我设置了一个非常简单的 .bat 文件来执行几个命令,这样我就不用每次都输入它们了,但是这些进程需要在 powershell 7 中运行。

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

powershell -Version 7.0.3 -Command {XXXXX};
Run Code Online (Sandbox Code Playgroud)

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

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

mkl*_*nt0 6

太长了;博士

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

在最简单的情况下:

pwsh -Command "XXXXX"
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

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

    • 要可靠地确定目标版本的可执行位置,请为其打开交互式控制台并运行(Get-Process -Id $PID).Path


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

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

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