想知道如何在powershell中将数组作为命令行参数传递给exe文件?以下是我目前正在做的工作
我从powershell函数调用一个exe文件,格式如下
$firstParam = "test1"
$secondParam = "test2"
$thirdParam = @()
$thirdParam = 'test3'
$thirdParam = $thirdParam + 'test4'
[void](& '..\SomeApp.exe' "$firstParam" "$secondParam" "$thirdParam"
字符串
下面是我在Application.exe中看到的输入参数
从powershell传递的第三个输入参数是一个数组,但在传递到exe文件时它被连接起来(空格分隔)。
是否可以将“test3”作为第三个参数传递,将“test4”作为第四个参数传递?
2条答案
按热度按时间iaqfqrcu1#
$thirdParam
不能是您的实现中的数组。当你写$thirdParam = @()
时,你确实声明了一个空数组,但是你把它重新赋值给一个字符串:$thirdParam = 'test3'
,然后转换为另一个字符串$thirdParam = $thirdParam + 'test4'
。我仍然不清楚你最初的意图,但下面是你如何将test3
作为第三个参数传递,并将test4
作为第四个参数传递:字符串
如果你只有2个固定参数,你可以有N个参数,切换到
Invoke-Expression
而不是Invoke-Command
:型
并确保您的参数引用正确。在这种情况下,如果$thirdParam包含空格,它将确定您的参数#4及以后。
kmbjn2e32#
我在使用Google时发现了这个问题,当时我问自己同样的问题,并想指出2012年10月发布的Windows PowerShell 3.0,后来通过splatting提供了一种方法。
在OP的示例中,当通过调用操作符调用可执行文件时,代码将看起来如下,因为他正在传递位置参数(至少从PowerShell的Angular 来看):
字符串
当需要将命名参数传递给PowerShell命令时,可以使用以下形式的哈希表
型
需要使用它来代替数组。如果
NamedParam
是交换机,则$Value
可以是$True
或$False
。(That话虽如此,Victor指出in his answer在OP的例子中的
$thirdParam
不是一个数组而是一个被追加的字符串,这当然是正确的。