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 это не массив, а добавляемая строка.)