Powershell - передать массив в качестве аргумента исполняемому файлу, вызываемому из командной строки

Хотите знать, как я могу передать массив в качестве аргумента командной строки в исполняемый файл в powershell? Вот над чем я сейчас работаю

Я вызываю exe-файл из функции powershell в следующем формате

$firstParam = "test1"
$secondParam = "test2"

$thirdParam = @()
$thirdParam = 'test3'
$thirdParam = $thirdParam + 'test4'

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

Вот что я вижу в качестве входных аргументов в Application.exe

Отладка информации в приложенииТретьим входным параметром, который был передан из PowerShell, был массив, но он был объединен (разделен пробелом) при передаче в исполняемый файл.

Можно ли передать "test3" в качестве третьего аргумента и "test4" в качестве четвертого аргумента?

2 ответа

Решение

$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 и далее.

Я нашел этот вопрос при использовании Google, когда задавал себе то же самое и хочу отметить, что Windows PowerShell 3.0, выпущенная в октябре 2012 года, а позже предлагает способ сделать это с помощью splatting.

В примере ОП код будет выглядеть следующим образом, поскольку он передает позиционные параметры (по крайней мере, с точки зрения PowerShell) при вызове исполняемого файла через оператор вызова:

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

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

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

Когда именованные параметры необходимо передать команде PowerShell, хеш-таблица вида

      $Params = @{ NamedParam = $Value }

необходимо использовать вместо массива. ЕслиNamedParamэто переключатель, то$Valueможет быть либо$Trueили$False.

(При этом Виктор, конечно, прав, указывая в своем ответе , что$thirdParamв примере OP это не массив, а добавляемая строка.)

Другие вопросы по тегам