【问题标题】:Powershell - Pass an array as argument to an executable called from command linePowershell - 将数组作为参数传递给从命令行调用的可执行文件
【发布时间】:2012-10-17 23:35:22
【问题描述】:

想知道如何将数组作为命令行参数传递给 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”作为第四个参数传递?

【问题讨论】:

  • 请注意,将所有参数放在一个数组中也可以;例如$appArgs = @($firstParam,$secondParam); $appArgs += $thirdParam; $appArgs += $fourthParam; [void](& '..\SomeApp.exe' $appArgs)。另请参阅§2.2

标签: powershell arguments pipeline


【解决方案1】:

$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 及以后的参数。

【讨论】:

  • 嗨 Neolisk - 感谢您的意见!我遇到的问题是,我只知道前两个参数是事先存在的,而第三个参数是动态的。我需要适应以下场景参数通过 - test1, test2, test3, test4 - test1, test2, test3, test4, test5
猜你喜欢
  • 2013-11-21
  • 2022-08-24
  • 2010-11-26
  • 1970-01-01
  • 2012-05-05
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
相关资源
最近更新 更多