使用bat启动Powershell脚本

时间:2009-11-26 16:52:43

标签: powershell

我有一个批处理文件test.bat来启动powershell脚本:

@pushd "C:\myscripts"
powershell .\test.ps1 arg1 "arg2 with space" arg3
@popd

脚本test.ps1(位于C:\ myscripts)非常简单,如:

# just print out the arguments
Write-Output ("args count: {0}" -f $args.length)
$args

然后我尝试启动test.bat。我应该将三个参数传递给ps1但是得到了以下结果:

算数:5    ARG1    ARG2    同    空间    ARG3

我在脚本中的预期,args [0]应该是arg1和args [1]应该是“arg2 with space”而args3 [2]应该是arg3。我无法理解为什么脚本实际上有5个参数。

如何按照我的预期将cmd或batch中的参数传递给powershell?像这样:

args count: 3
arg1
arg2 with space
arg3

2 个答案:

答案 0 :(得分:7)

powershell .\test.ps1 arg1 'arg2 with space' arg3

powershell .\test.ps1 arg1 """arg2 with space""" arg3

我认为你应该尽量避免使用双引号,因为cmd也已经使用过它们,因此有点难以预测PowerShell会得到什么。请记住,这会通过两个 shell传递,因此会有两层转义/引用。

PowerShell本身并没有区分单引号和双引号。至少在这种情况下,差异是无关紧要的。

答案 1 :(得分:0)

行。我想我明白了:

@pushd "C:\myscripts"
powershell .\test.ps1 arg1 'arg2 with space' arg3
@popd

单引号char而不是double one。也许他们在PS中意味着不同的东西。