如何使用批处理文件中的参数启动 powershell 脚本

问题描述 投票:0回答:1

我想从批处理文件启动 powershell 脚本,并确保该脚本在批处理文件继续下一步之前关闭。我一直无法弄清楚如何使用参数启动脚本。

以下命令在直接 PowerShell 中运行时有效:

Start-Process powershell -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"C:\my file path\myscript.ps1`" -fruit banana -car toyota"

但是我需要能够从批处理文件(CMD)运行它。下面的不起作用。 似乎是引用的问题,但不幸的是单引号被忽略了。

powershell -Command "Start-Process powershell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File `"C:\my file path\myscript.ps1`" -fruit banana -car toyota' -Wait"

为什么这不起作用以及为什么单引号不起作用?

powershell batch-file
1个回答
0
投票

您在这里问的问题是一个非常常见且重复的问题,这意味着我可以回答这个确实有效的特定命令行,但我宁愿给您一些可以使用的句柄。

在此答案的调用示例中,我使用以下

C:\my file path\myscript.ps1

Param($Fruit, $Car)
Write-Host 'Fruit:' $Fruit
Write-Host 'Car:' $Car
$Null = Read-Host 'Press <enter> to continue'

保持简单

在很多情况下,在这样的情况下,嵌入了太多的 shell 和进程,这增加了这个问题的复杂性,成本高昂。正如您的示例中所示,没有理由使用

Start-Process
来“确保脚本在批处理文件继续下一步之前关闭”。 PowerShell 的点采购功能允许您使用更简单且更便宜的命令来调用脚本:

. 'C:\my file path\myscript.ps1' -fruit banana -car toyota

点源命令也同步运行。与

Start-Process
的区别 不过,它们在调用者的相同作用域中运行(请参阅:关于作用域),但是当从 CLI(命令行界面)调用单个脚本作为
PowerShell.exe
CMD.exe
时,这不应该成为问题。

这意味着如果您想从 [

powershell.exe
] 调用脚本,您可以这样做:

PowerShell -NoProfile -Command { . 'C:\my file path\myscript.ps1' -fruit banana -car toyota }

请注意,

PowerShell
命令行为您提供了额外的可能性来分隔脚本,即使用大括号(
{ ... }
)而不是在新字符串中嵌入命令(可能已经包含引号)。 此外,如果您想从
powershell.exe
命令行界面调用您的脚本,您也可以直接调用您的脚本:

PowerShell -NoProfile -File 'C:\my file path\myscript.ps1' -fruit banana -car toyota

古老的“CMD”命令行

我可能失去了所有的乐趣,最后一个命令行也应该在

CMD
命令行中工作,但我们假设您希望将 cmdlet 用作
Start-Process
,并带有需要引用为的参数在你的例子中:
-File "C:\my file path\myscript.ps1"

关键来了:
CMD
吃双引号
它只是使用双引号来分隔参数,但在确定参数时双引号被删除(顺便说一句。它不理解大括号)。
为了证明这一点(使用
CMD
CLI):

PowerShell -Command ". 'C:\my file path\myscript.ps1' -fruit ba"na"na -car toyota"
Fruit: banana
Car: toyota

因此,解决这个问题的最简单方法就是避免使用双引号,并在 CMD 命令行中的 PowerShell 部分使用单引号 (`'...``):

PowerShell -Command ". 'C:\my file path\myscript.ps1' -fruit banana -car toyota"

如果确实需要传递双引号,您需要使用更多双引号对其进行转义,如下所述:在参数中转义双引号

PowerShell ". 'C:\my file path\myscript.ps1' -fruit 'ba"""na"""na' -car toyota"
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.