PowerShell -将数组作为参数传递给从命令行调用的可执行文件

0dxa2lsx  于 2023-08-05  发布在  Shell
关注(0)|答案(2)|浏览(141)

想知道如何在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”作为第四个参数传递?

iaqfqrcu

iaqfqrcu1#

$thirdParam不能是您的实现中的数组。当你写$thirdParam = @()时,你确实声明了一个空数组,但是你把它重新赋值给一个字符串:$thirdParam = 'test3',然后转换为另一个字符串$thirdParam = $thirdParam + 'test4'。我仍然不清楚你最初的意图,但下面是你如何将test3作为第三个参数传递,并将test4作为第四个参数传递:

$fourthParam = 'test4'
[void](& '..\SomeApp.exe' "$firstParam" "$secondParam" "$thirdParam" "$fourthParam"

字符串
如果你只有2个固定参数,你可以有N个参数,切换到Invoke-Expression而不是Invoke-Command

[void](Invoke-Expression "..\SomeApp.exe $firstParam $secondParam $thirdParam"


并确保您的参数引用正确。在这种情况下,如果$thirdParam包含空格,它将确定您的参数#4及以后。

kmbjn2e3

kmbjn2e32#

我在使用Google时发现了这个问题,当时我问自己同样的问题,并想指出2012年10月发布的Windows PowerShell 3.0,后来通过splatting提供了一种方法。
在OP的示例中,当通过调用操作符调用可执行文件时,代码将看起来如下,因为他正在传递位置参数(至少从PowerShell的Angular 来看):

$firstParam = 'test1'
$secondParam = 'test2'

$thirdAndFourthParam = , 'test3'
$thirdAndFourthParam += 'test4'

[void](& '..\SomeApp.exe' $firstParam $secondParam @thirdAndFourthParam)

字符串
当需要将命名参数传递给PowerShell命令时,可以使用以下形式的哈希表

$Params = @{ NamedParam = $Value }


需要使用它来代替数组。如果NamedParam是交换机,则$Value可以是$True$False
(That话虽如此,Victor指出in his answer在OP的例子中的$thirdParam不是一个数组而是一个被追加的字符串,这当然是正确的。

相关问题