powershell - .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+。
解决方案
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"
.
-Version
powershell.exe
Windows PowerShell CLI的参数不允许您启动任何PowerShell 版本,只能启动旧版本的Windows PowerShell:
- 事实上,唯一受支持的参数是
-Version 2
,而且只有在您之前安装了所需的旧版 .NET Framework 时才会成功。 - 警告:虽然高于 v5.1 的版本(最新和最后的 Windows PowerShell 版本)会明显导致错误(您看到的那个),但不受支持的较低版本会被悄悄忽略;实际上,
-Version 1
and-Version 2
都将启动 2.0 版,而-Version 3
,-Version 4
和-Version 5
被有效地忽略并运行 v5.1 - 验证$PSVersionTable.PSVersion
虽然-Version
参数在pwsh.exe
PowerShell [Core] v6+ CLI中仍然存在,但它的含义已经改变:它现在只报告一个版本号,即目标可执行文件自己的(因此不带参数)。
推荐阅读
- python - 我的 miniconda3 安装(python3.7.1)中缺少 time.thread_time()
- hadoop - 为什么每次重启hive-server都需要重启hue
- c# - 如何使用实体框架在winforms应用程序的连接字符串中实现加密和解密解决方案?
- c++ - 更改 2D 矩阵上的值时出现段错误
- vb.net - 在程序启动时自动打开 xls 文件?
- google-drive-api - Google Drive 上的文件提供 API 错误。需要与旧文件关联的“Drive Realtime API 数据”
- c# - 读取包含名字和姓氏列的 csv 文件时出现问题
- python - 嵌套 tf.map_fn 性能慢
- flutter - 每个选项卡具有唯一操作的选项卡栏
- reactjs - React Route 中的 useHistory() 和 props.history 有什么区别