2016-09-12 11 views
0

я работаю с Octopush приборной панели:Powershell: Преобразование массива в последовательности аргументов для передачи их в приложение ехе через Octopus приборной панели

enter image description here

код на скриншоте приносит мне список наборов изменений TFS. Итак, у меня уже есть список моих идентификаторов. мне нужно запустить некоторые исполняемый файл и передать параметры в этот ехе в следующим образом через C#:

string cParams = "\"Test proj name\" " + "3.22.652.965863 " + "QA " + "false " + "463841" + " 464268" + " 463450" + " 463841" + " 463167" + " 458908" + " 462917" + " 462780" + " 462429" + " 461225" + " 460414"; 
     var proc = System.Diagnostics.Process.Start(@"\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe", cParams); 

Или в PowerShell это работает так:

start "" "\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe" "Test proj name" 3.22.652.965863 QA false 463841 464268 463450 463841 463167 458908 462917 
pause 

Мне нужно объединить betwwen мой жесткий «закодированные аргементы» «имя proj», «версия num», «строка1», «ложь» и список полученных мной идентификаторов. Как я могу заставить его работать в Powershell?

+0

С чем вы столкнулись? Политика исполнения Powershell? Вызов .exe? Передача параметров? Или конкретное приложение? Вы говорите «это работает так», а затем спрашивайте «как заставить его работать», поэтому я смущен в вопросе. –

+0

Посмотрите на [Invoke-Expression] (https://technet.microsoft.com/de-de/library/hh849893.aspx) в powershell, вы можете создать свой код и затем запустить его с помощью команды invoke-expression. –

+0

Извините, я не был креаром. Я отредактировал свой вопрос. Мне нужно объединить между динамическим массивом и несколькими константами и передать его в качестве аргументов для моего exe. Список идентификаторов всегда должен быть в конце списка аргументов. –

ответ

1
$Exe = '\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe' 
$Params = "Test proj name " + "3.22.652.965863 " + "QA " + "false " + "463841" + " 464268" + " 463450" + " 463841" + " 463167" + " 458908" + " 462917" + " 462780" + " 462429" + " 461225" + " 460414" 
&$Exe $Params 

Положитесь на свой родной команде, возможно, потребуется, чтобы присоединиться к Params как массив первого

$Params = "Test proj name","3.22.652.965863","QA ","false" [etc.] 
&$Exe $Params 

Использование Например, вы можете продолжать использовать System.Diagnostics.Process:

[System.Diagnostics.Process]::Start($Exe,$Params) 

Другой вариант заключается в использовании WMI:

([WMICLASS]"ROOT\CIMV2:Win32_Process").Create("$Exe $Params") 

И конечно PowerShell Start-Process с -ArgumentList Параметр

EDIT

Отдельные ваши Константы и динамические переменные,

$Exe = `\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe` 
$Constants = "Test proj name","3.22.652.965863","QA" etc. 
$Dynamic = "462917","462780","462429","461225","460414" 

&$Exe $Constants $Dynamic 

Или использовать один из других вариантов Execution

+0

Последний ответ выглядит так, как будто он должен работать. Спасибо. Я собираюсь попробовать. –

+0

Не работает. У меня такое же исключение для $ Exe, $ Constants и $ Dynamic: не распознается как внутренняя или внешняя команда. –

+0

что такое exeption? – Avshalom

0
$argumentList = "`"Test proj name`" 3.22.652.965863 QA false 463841 464268 463450 463841 463167 458908 462917" 
    start-process -FilePath "\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe" -ArgumentList $argumentList 
+0

Как я могу объединить мой динамический массив из ids $ changesets с переменными $ projName, $ version, $ envName и $ resolve? Что-то вроде: $ params = $ projName + $ version + $ envName + $ resolve + $ changesets? –

0

Мой ответ на основе кода, предложенного Avshalom, который был модифицирован:

$Exe = `\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 

2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe` 
$Constants = "Test proj name","3.22.652.965863","Dev","false" 
$Dynamic = "462917","462780","462429","461225","460414" 

$all = $Constants + $Dynamic | select -uniq 

&$Exe $all 

Проблема заключается в том, что невозможно передать два параметра .NET concole приложения таким образом:

$Exe = `\\ptnas1\home_dirs\michaelb\Documents\Visual Studio 2015\Projects\Changesetes\Changesetes\bin\Debug\Changesetes.exe` 
$Constants = "Test proj name","3.22.652.965863","QA" etc. 
$Dynamic = "462917","462780","462429","461225","460414" 

&$Exe $Constants $Dynamic 

Поскольку приложение никогда не получает, что последний аргумент. Я полагаю, что powershell просто игнорирует второй.